
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>E租贝MVR设备租赁平台 - 程序鉴别材料</title>
    <style>
        body { 
            font-family: 'Courier New', monospace; 
            font-size: 10px; 
            line-height: 1.2; 
            margin: 20px;
            color: #000;
        }
        .header { 
            text-align: center; 
            font-size: 14px; 
            font-weight: bold; 
            margin-bottom: 20px; 
            border-bottom: 2px solid #000;
            padding-bottom: 10px;
        }
        .file-header { 
            font-weight: bold; 
            margin: 20px 0 10px 0; 
            padding: 5px; 
            background: #f0f0f0; 
            border-left: 4px solid #333;
        }
        .line-number { 
            display: inline-block; 
            width: 40px; 
            color: #666; 
            text-align: right; 
            margin-right: 10px;
        }
        .code-line { 
            margin: 0; 
            padding: 1px 0;
            white-space: pre-wrap;
            word-break: break-all;
        }
        .page-break { 
            page-break-before: always; 
        }
        .section-title {
            font-size: 12px;
            font-weight: bold;
            margin: 30px 0 15px 0;
            color: #333;
            border-bottom: 1px solid #ccc;
            padding-bottom: 5px;
        }
    </style>
</head>
<body>
    <div class="header">
        E租贝MVR设备租赁平台 V1.0<br>
        程序鉴别材料（源程序前30页和后30页）
    </div>
<div class="section-title">源程序前30页</div>
<div class="file-header">文件: ./main.ts</div>
<div class="code-line"><span class="line-number">   1</span>import { createSSRApp } from 'vue'</div>
<div class="code-line"><span class="line-number">   2</span>import App from './App.vue'</div>
<div class="code-line"><span class="line-number">   3</span>import uviewPlus from '@/uni_modules/uview-plus'</div>
<div class="code-line"><span class="line-number">   4</span></div>
<div class="code-line"><span class="line-number">   5</span>export function createApp() {</div>
<div class="code-line"><span class="line-number">   6</span>  const app = createSSRApp(App)</div>
<div class="code-line"><span class="line-number">   7</span>  app.use(uviewPlus,() =&gt; {</div>
<div class="code-line"><span class="line-number">   8</span>		return {</div>
<div class="code-line"><span class="line-number">   9</span>			options: {</div>
<div class="code-line"><span class="line-number">  10</span>				// 修改config对象的属性</div>
<div class="code-line"><span class="line-number">  11</span>				config: {</div>
<div class="code-line"><span class="line-number">  12</span>					// 默认字体图标自托管资源地址</div>
<div class="code-line"><span class="line-number">  13</span>					iconUrl: 'https://at.alicdn.com/t/font_2225171_8kdcwk4po24.ttf'</div>
<div class="code-line"><span class="line-number">  14</span>				}</div>
<div class="code-line"><span class="line-number">  15</span>			}</div>
<div class="code-line"><span class="line-number">  16</span>		}</div>
<div class="code-line"><span class="line-number">  17</span>	})</div>
<div class="code-line"><span class="line-number">  18</span>  return {</div>
<div class="code-line"><span class="line-number">  19</span>    app</div>
<div class="code-line"><span class="line-number">  20</span>  }</div>
<div class="code-line"><span class="line-number">  21</span>} </div>
<div class="file-header">文件: ./App.vue</div>
<div class="code-line"><span class="line-number">  22</span>&lt;script&gt;</div>
<div class="code-line"><span class="line-number">  23</span>	import { isLoginRequired, checkLoginStatus } from '@/utils/auth.js'</div>
<div class="code-line"><span class="line-number">  24</span>	</div>
<div class="code-line"><span class="line-number">  25</span>	export default {</div>
<div class="code-line"><span class="line-number">  26</span>		onLaunch: function () {</div>
<div class="code-line"><span class="line-number">  27</span>			console.log('E租贝应用启动')</div>
<div class="code-line"><span class="line-number">  28</span>			// 加载本地字体文件，解决Android设备图标显示问题</div>
<div class="code-line"><span class="line-number">  29</span>			this.loadLocalFont()</div>
<div class="code-line"><span class="line-number">  30</span>		},</div>
<div class="code-line"><span class="line-number">  31</span>		onShow: function () {</div>
<div class="code-line"><span class="line-number">  32</span>			console.log('App Show')</div>
<div class="code-line"><span class="line-number">  33</span>		},</div>
<div class="code-line"><span class="line-number">  34</span>		onHide: function () {</div>
<div class="code-line"><span class="line-number">  35</span>			console.log('App Hide')</div>
<div class="code-line"><span class="line-number">  36</span>		},</div>
<div class="code-line"><span class="line-number">  37</span>		// 全局路由守卫</div>
<div class="code-line"><span class="line-number">  38</span>		onPageNotFound: function (res) {</div>
<div class="code-line"><span class="line-number">  39</span>			console.log('页面不存在', res)</div>
<div class="code-line"><span class="line-number">  40</span>			uni.reLaunch({</div>
<div class="code-line"><span class="line-number">  41</span>				url: '/pages/index/index'</div>
<div class="code-line"><span class="line-number">  42</span>			})</div>
<div class="code-line"><span class="line-number">  43</span>		},</div>
<div class="code-line"><span class="line-number">  44</span>		methods: {</div>
<div class="code-line"><span class="line-number">  45</span>			// 加载本地字体文件</div>
<div class="code-line"><span class="line-number">  46</span>			loadLocalFont() {</div>
<div class="code-line"><span class="line-number">  47</span>				// #ifdef APP-PLUS || H5 || MP-WEIXIN || MP-ALIPAY</div>
<div class="code-line"><span class="line-number">  48</span>				uni.loadFontFace({</div>
<div class="code-line"><span class="line-number">  49</span>					global: true, // 全局生效</div>
<div class="code-line"><span class="line-number">  50</span>					family: 'uicon-iconfont',</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">  51</span>					source: 'url("/static/uicon-iconfont.ttf")',</div>
<div class="code-line"><span class="line-number">  52</span>					success() {</div>
<div class="code-line"><span class="line-number">  53</span>						console.log('本地图标字体加载成功')</div>
<div class="code-line"><span class="line-number">  54</span>					},</div>
<div class="code-line"><span class="line-number">  55</span>					fail(err) {</div>
<div class="code-line"><span class="line-number">  56</span>						console.error('本地图标字体加载失败:', err)</div>
<div class="code-line"><span class="line-number">  57</span>						// 如果本地字体加载失败，回退到CDN</div>
<div class="code-line"><span class="line-number">  58</span>						uni.loadFontFace({</div>
<div class="code-line"><span class="line-number">  59</span>							global: true,</div>
<div class="code-line"><span class="line-number">  60</span>							family: 'uicon-iconfont',</div>
<div class="code-line"><span class="line-number">  61</span>							source: 'url("https://at.alicdn.com/t/font_2225171_8kdcwk4po24.ttf")',</div>
<div class="code-line"><span class="line-number">  62</span>							success() {</div>
<div class="code-line"><span class="line-number">  63</span>								console.log('CDN图标字体加载成功')</div>
<div class="code-line"><span class="line-number">  64</span>							},</div>
<div class="code-line"><span class="line-number">  65</span>							fail(err2) {</div>
<div class="code-line"><span class="line-number">  66</span>								console.error('CDN图标字体加载也失败:', err2)</div>
<div class="code-line"><span class="line-number">  67</span>							}</div>
<div class="code-line"><span class="line-number">  68</span>						})</div>
<div class="code-line"><span class="line-number">  69</span>					}</div>
<div class="code-line"><span class="line-number">  70</span>				})</div>
<div class="code-line"><span class="line-number">  71</span>				// #endif</div>
<div class="code-line"><span class="line-number">  72</span>			}</div>
<div class="code-line"><span class="line-number">  73</span>		}</div>
<div class="code-line"><span class="line-number">  74</span>	}</div>
<div class="code-line"><span class="line-number">  75</span>&lt;/script&gt;</div>
<div class="code-line"><span class="line-number">  76</span></div>
<div class="code-line"><span class="line-number">  77</span>&lt;style lang="scss"&gt;</div>
<div class="code-line"><span class="line-number">  78</span>/* 导入uView样式 - 传统uni-app项目 */</div>
<div class="code-line"><span class="line-number">  79</span>@import "@/uni_modules/uview-plus/index.scss";</div>
<div class="code-line"><span class="line-number">  80</span>/* 导入项目SCSS变量 */</div>
<div class="code-line"><span class="line-number">  81</span>@import "@/uni.scss";</div>
<div class="code-line"><span class="line-number">  82</span></div>
<div class="code-line"><span class="line-number">  83</span>/* ==================== 临时uView基础样式 ==================== */</div>
<div class="code-line"><span class="line-number">  84</span>/* 基础样式，确保uView组件能正常显示 */</div>
<div class="code-line"><span class="line-number">  85</span>page {</div>
<div class="code-line"><span class="line-number">  86</span>  box-sizing: border-box;</div>
<div class="code-line"><span class="line-number">  87</span>}</div>
<div class="code-line"><span class="line-number">  88</span></div>
<div class="code-line"><span class="line-number">  89</span>.u-flex {</div>
<div class="code-line"><span class="line-number">  90</span>  display: flex !important;</div>
<div class="code-line"><span class="line-number">  91</span>  flex-direction: row;</div>
<div class="code-line"><span class="line-number">  92</span>}</div>
<div class="code-line"><span class="line-number">  93</span></div>
<div class="code-line"><span class="line-number">  94</span>.u-flex-1 {</div>
<div class="code-line"><span class="line-number">  95</span>  flex: 1;</div>
<div class="code-line"><span class="line-number">  96</span>}</div>
<div class="code-line"><span class="line-number">  97</span></div>
<div class="code-line"><span class="line-number">  98</span>.u-flex-column {</div>
<div class="code-line"><span class="line-number">  99</span>  flex-direction: column !important;</div>
<div class="code-line"><span class="line-number"> 100</span>}</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 101</span></div>
<div class="code-line"><span class="line-number"> 102</span>.u-justify-center {</div>
<div class="code-line"><span class="line-number"> 103</span>  justify-content: center;</div>
<div class="code-line"><span class="line-number"> 104</span>}</div>
<div class="code-line"><span class="line-number"> 105</span></div>
<div class="code-line"><span class="line-number"> 106</span>.u-justify-between {</div>
<div class="code-line"><span class="line-number"> 107</span>  justify-content: space-between;</div>
<div class="code-line"><span class="line-number"> 108</span>}</div>
<div class="code-line"><span class="line-number"> 109</span></div>
<div class="code-line"><span class="line-number"> 110</span>.u-align-center {</div>
<div class="code-line"><span class="line-number"> 111</span>  align-items: center;</div>
<div class="code-line"><span class="line-number"> 112</span>}</div>
<div class="code-line"><span class="line-number"> 113</span></div>
<div class="code-line"><span class="line-number"> 114</span>.u-button {</div>
<div class="code-line"><span class="line-number"> 115</span>  display: inline-flex;</div>
<div class="code-line"><span class="line-number"> 116</span>  align-items: center;</div>
<div class="code-line"><span class="line-number"> 117</span>  justify-content: center;</div>
<div class="code-line"><span class="line-number"> 118</span>  padding: 12rpx 24rpx;</div>
<div class="code-line"><span class="line-number"> 119</span>  border-radius: 6rpx;</div>
<div class="code-line"><span class="line-number"> 120</span>  font-size: 28rpx;</div>
<div class="code-line"><span class="line-number"> 121</span>  line-height: 1;</div>
<div class="code-line"><span class="line-number"> 122</span>}</div>
<div class="code-line"><span class="line-number"> 123</span>view, text, image, button, input, textarea, scroll-view, swiper, navigator {</div>
<div class="code-line"><span class="line-number"> 124</span>  box-sizing: border-box;</div>
<div class="code-line"><span class="line-number"> 125</span>}</div>
<div class="code-line"><span class="line-number"> 126</span>/* 页面基础样式 */</div>
<div class="code-line"><span class="line-number"> 127</span>page {</div>
<div class="code-line"><span class="line-number"> 128</span>  background-color: $bg-secondary;</div>
<div class="code-line"><span class="line-number"> 129</span>  color: $text-primary;</div>
<div class="code-line"><span class="line-number"> 130</span>  font-size: $font-size-base;</div>
<div class="code-line"><span class="line-number"> 131</span>  line-height: $line-height-base;</div>
<div class="code-line"><span class="line-number"> 132</span>  -webkit-font-smoothing: antialiased;</div>
<div class="code-line"><span class="line-number"> 133</span>  -moz-osx-font-smoothing: grayscale;</div>
<div class="code-line"><span class="line-number"> 134</span>}</div>
<div class="code-line"><span class="line-number"> 135</span></div>
<div class="code-line"><span class="line-number"> 136</span>/* 清除默认样式 */</div>
<div class="code-line"><span class="line-number"> 137</span>view, text, image, button {</div>
<div class="code-line"><span class="line-number"> 138</span>  padding: 0;</div>
<div class="code-line"><span class="line-number"> 139</span>  margin: 0;</div>
<div class="code-line"><span class="line-number"> 140</span>  border: 0;</div>
<div class="code-line"><span class="line-number"> 141</span>}</div>
<div class="code-line"><span class="line-number"> 142</span></div>
<div class="code-line"><span class="line-number"> 143</span>/* 统一按钮样式 */</div>
<div class="code-line"><span class="line-number"> 144</span>button {</div>
<div class="code-line"><span class="line-number"> 145</span>  background: none;</div>
<div class="code-line"><span class="line-number"> 146</span>  border: none;</div>
<div class="code-line"><span class="line-number"> 147</span>  outline: none;</div>
<div class="code-line"><span class="line-number"> 148</span>  font-size: inherit;</div>
<div class="code-line"><span class="line-number"> 149</span>  color: inherit;</div>
<div class="code-line"><span class="line-number"> 150</span>}</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 151</span></div>
<div class="code-line"><span class="line-number"> 152</span>button[disabled] {</div>
<div class="code-line"><span class="line-number"> 153</span>  opacity: 0.5;</div>
<div class="code-line"><span class="line-number"> 154</span>  cursor: not-allowed;</div>
<div class="code-line"><span class="line-number"> 155</span>}</div>
<div class="code-line"><span class="line-number"> 156</span></div>
<div class="code-line"><span class="line-number"> 157</span>/* 图片默认样式 */</div>
<div class="code-line"><span class="line-number"> 158</span>image {</div>
<div class="code-line"><span class="line-number"> 159</span>  display: block;</div>
<div class="code-line"><span class="line-number"> 160</span>  border: 0;</div>
<div class="code-line"><span class="line-number"> 161</span>  max-width: 100%;</div>
<div class="code-line"><span class="line-number"> 162</span>  height: auto;</div>
<div class="code-line"><span class="line-number"> 163</span>}</div>
<div class="code-line"><span class="line-number"> 164</span></div>
<div class="code-line"><span class="line-number"> 165</span>/* 输入框样式重置 */</div>
<div class="code-line"><span class="line-number"> 166</span>input, textarea {</div>
<div class="code-line"><span class="line-number"> 167</span>  font-size: inherit;</div>
<div class="code-line"><span class="line-number"> 168</span>  color: inherit;</div>
<div class="code-line"><span class="line-number"> 169</span>  background: transparent;</div>
<div class="code-line"><span class="line-number"> 170</span>  border: none;</div>
<div class="code-line"><span class="line-number"> 171</span>  outline: none;</div>
<div class="code-line"><span class="line-number"> 172</span>}</div>
<div class="code-line"><span class="line-number"> 173</span></div>
<div class="code-line"><span class="line-number"> 174</span>/* ==================== 通用组件样式 ==================== */</div>
<div class="code-line"><span class="line-number"> 175</span>/* 页面容器 */</div>
<div class="code-line"><span class="line-number"> 176</span>.page-container {</div>
<div class="code-line"><span class="line-number"> 177</span>  min-height: 100vh;</div>
<div class="code-line"><span class="line-number"> 178</span>  background: $bg-secondary;</div>
<div class="code-line"><span class="line-number"> 179</span>  padding: $page-padding;</div>
<div class="code-line"><span class="line-number"> 180</span>  padding-bottom: calc(env(safe-area-inset-bottom) + 40rpx);</div>
<div class="code-line"><span class="line-number"> 181</span>}</div>
<div class="code-line"><span class="line-number"> 182</span></div>
<div class="code-line"><span class="line-number"> 183</span>/* 内容卡片 */</div>
<div class="code-line"><span class="line-number"> 184</span>.content-card {</div>
<div class="code-line"><span class="line-number"> 185</span>  background: $bg-primary;</div>
<div class="code-line"><span class="line-number"> 186</span>  border-radius: $border-radius-md;</div>
<div class="code-line"><span class="line-number"> 187</span>  padding: $card-padding;</div>
<div class="code-line"><span class="line-number"> 188</span>  margin-bottom: $section-margin;</div>
<div class="code-line"><span class="line-number"> 189</span>  box-shadow: $box-shadow-light;</div>
<div class="code-line"><span class="line-number"> 190</span>}</div>
<div class="code-line"><span class="line-number"> 191</span></div>
<div class="code-line"><span class="line-number"> 192</span>/* 卡片标题 */</div>
<div class="code-line"><span class="line-number"> 193</span>.card-title {</div>
<div class="code-line"><span class="line-number"> 194</span>  font-size: $font-size-md;</div>
<div class="code-line"><span class="line-number"> 195</span>  font-weight: $font-weight-bold;</div>
<div class="code-line"><span class="line-number"> 196</span>  color: $text-primary;</div>
<div class="code-line"><span class="line-number"> 197</span>  margin-bottom: $margin-md;</div>
<div class="code-line"><span class="line-number"> 198</span>  padding-bottom: $padding-base;</div>
<div class="code-line"><span class="line-number"> 199</span>  border-bottom: 1rpx solid $border-color;</div>
<div class="code-line"><span class="line-number"> 200</span>}</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 201</span></div>
<div class="code-line"><span class="line-number"> 202</span>/* 列表项 */</div>
<div class="code-line"><span class="line-number"> 203</span>.list-item {</div>
<div class="code-line"><span class="line-number"> 204</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 205</span>  align-items: center;</div>
<div class="code-line"><span class="line-number"> 206</span>  padding: $padding-xl 0;</div>
<div class="code-line"><span class="line-number"> 207</span>  border-bottom: 1rpx solid $border-color;</div>
<div class="code-line"><span class="line-number"> 208</span>  transition: $transition-fast;</div>
<div class="code-line"><span class="line-number"> 209</span>}</div>
<div class="code-line"><span class="line-number"> 210</span></div>
<div class="code-line"><span class="line-number"> 211</span>.list-item:last-child {</div>
<div class="code-line"><span class="line-number"> 212</span>  border-bottom: none;</div>
<div class="code-line"><span class="line-number"> 213</span>}</div>
<div class="code-line"><span class="line-number"> 214</span></div>
<div class="code-line"><span class="line-number"> 215</span>.list-item:active {</div>
<div class="code-line"><span class="line-number"> 216</span>  background: $bg-light-gray;</div>
<div class="code-line"><span class="line-number"> 217</span>  transform: scale(0.98);</div>
<div class="code-line"><span class="line-number"> 218</span>}</div>
<div class="code-line"><span class="line-number"> 219</span></div>
<div class="code-line"><span class="line-number"> 220</span>/* 状态标签 */</div>
<div class="code-line"><span class="line-number"> 221</span>.status-tag {</div>
<div class="code-line"><span class="line-number"> 222</span>  padding: 6rpx 16rpx;</div>
<div class="code-line"><span class="line-number"> 223</span>  border-radius: $border-radius-base;</div>
<div class="code-line"><span class="line-number"> 224</span>  font-size: $font-size-sm;</div>
<div class="code-line"><span class="line-number"> 225</span>  font-weight: $font-weight-medium;</div>
<div class="code-line"><span class="line-number"> 226</span>  text-align: center;</div>
<div class="code-line"><span class="line-number"> 227</span>  min-width: 120rpx;</div>
<div class="code-line"><span class="line-number"> 228</span>}</div>
<div class="code-line"><span class="line-number"> 229</span></div>
<div class="code-line"><span class="line-number"> 230</span>.status-tag.available {</div>
<div class="code-line"><span class="line-number"> 231</span>  background: $status-available;</div>
<div class="code-line"><span class="line-number"> 232</span>  color: $status-available-text;</div>
<div class="code-line"><span class="line-number"> 233</span>}</div>
<div class="code-line"><span class="line-number"> 234</span></div>
<div class="code-line"><span class="line-number"> 235</span>.status-tag.unavailable {</div>
<div class="code-line"><span class="line-number"> 236</span>  background: $status-unavailable;</div>
<div class="code-line"><span class="line-number"> 237</span>  color: $status-unavailable-text;</div>
<div class="code-line"><span class="line-number"> 238</span>}</div>
<div class="code-line"><span class="line-number"> 239</span></div>
<div class="code-line"><span class="line-number"> 240</span>.status-tag.pending {</div>
<div class="code-line"><span class="line-number"> 241</span>  background: $status-pending;</div>
<div class="code-line"><span class="line-number"> 242</span>  color: $status-pending-text;</div>
<div class="code-line"><span class="line-number"> 243</span>}</div>
<div class="code-line"><span class="line-number"> 244</span></div>
<div class="code-line"><span class="line-number"> 245</span>.status-tag.confirmed {</div>
<div class="code-line"><span class="line-number"> 246</span>  background: $status-confirmed;</div>
<div class="code-line"><span class="line-number"> 247</span>  color: $status-confirmed-text;</div>
<div class="code-line"><span class="line-number"> 248</span>}</div>
<div class="code-line"><span class="line-number"> 249</span></div>
<div class="code-line"><span class="line-number"> 250</span>.status-tag.completed {</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 251</span>  background: $status-completed;</div>
<div class="code-line"><span class="line-number"> 252</span>  color: $status-completed-text;</div>
<div class="code-line"><span class="line-number"> 253</span>}</div>
<div class="code-line"><span class="line-number"> 254</span></div>
<div class="code-line"><span class="line-number"> 255</span>.status-tag.cancelled {</div>
<div class="code-line"><span class="line-number"> 256</span>  background: $status-cancelled;</div>
<div class="code-line"><span class="line-number"> 257</span>  color: $status-cancelled-text;</div>
<div class="code-line"><span class="line-number"> 258</span>}</div>
<div class="code-line"><span class="line-number"> 259</span></div>
<div class="code-line"><span class="line-number"> 260</span>/* 价格标签 */</div>
<div class="code-line"><span class="line-number"> 261</span>.price-tag {</div>
<div class="code-line"><span class="line-number"> 262</span>  color: $price-color;</div>
<div class="code-line"><span class="line-number"> 263</span>  font-weight: $font-weight-bold;</div>
<div class="code-line"><span class="line-number"> 264</span>  font-size: $font-size-md;</div>
<div class="code-line"><span class="line-number"> 265</span>}</div>
<div class="code-line"><span class="line-number"> 266</span></div>
<div class="code-line"><span class="line-number"> 267</span>.price-tag-large {</div>
<div class="code-line"><span class="line-number"> 268</span>  color: $price-color;</div>
<div class="code-line"><span class="line-number"> 269</span>  font-weight: $font-weight-bold;</div>
<div class="code-line"><span class="line-number"> 270</span>  font-size: $font-size-xl;</div>
<div class="code-line"><span class="line-number"> 271</span>}</div>
<div class="code-line"><span class="line-number"> 272</span></div>
<div class="code-line"><span class="line-number"> 273</span>/* 用户头像 */</div>
<div class="code-line"><span class="line-number"> 274</span>.user-avatar {</div>
<div class="code-line"><span class="line-number"> 275</span>  border-radius: $border-radius-circle;</div>
<div class="code-line"><span class="line-number"> 276</span>  border: 4rpx solid rgba(255, 255, 255, 0.3);</div>
<div class="code-line"><span class="line-number"> 277</span>  overflow: hidden;</div>
<div class="code-line"><span class="line-number"> 278</span>}</div>
<div class="code-line"><span class="line-number"> 279</span></div>
<div class="code-line"><span class="line-number"> 280</span>.user-avatar.size-sm {</div>
<div class="code-line"><span class="line-number"> 281</span>  width: $avatar-size-sm;</div>
<div class="code-line"><span class="line-number"> 282</span>  height: $avatar-size-sm;</div>
<div class="code-line"><span class="line-number"> 283</span>}</div>
<div class="code-line"><span class="line-number"> 284</span></div>
<div class="code-line"><span class="line-number"> 285</span>.user-avatar.size-base {</div>
<div class="code-line"><span class="line-number"> 286</span>  width: $avatar-size-base;</div>
<div class="code-line"><span class="line-number"> 287</span>  height: $avatar-size-base;</div>
<div class="code-line"><span class="line-number"> 288</span>}</div>
<div class="code-line"><span class="line-number"> 289</span></div>
<div class="code-line"><span class="line-number"> 290</span>.user-avatar.size-lg {</div>
<div class="code-line"><span class="line-number"> 291</span>  width: $avatar-size-lg;</div>
<div class="code-line"><span class="line-number"> 292</span>  height: $avatar-size-lg;</div>
<div class="code-line"><span class="line-number"> 293</span>}</div>
<div class="code-line"><span class="line-number"> 294</span></div>
<div class="code-line"><span class="line-number"> 295</span>/* 设备图片 */</div>
<div class="code-line"><span class="line-number"> 296</span>.device-image {</div>
<div class="code-line"><span class="line-number"> 297</span>  width: $device-image-size;</div>
<div class="code-line"><span class="line-number"> 298</span>  height: $device-image-size;</div>
<div class="code-line"><span class="line-number"> 299</span>  border-radius: $device-image-radius;</div>
<div class="code-line"><span class="line-number"> 300</span>  overflow: hidden;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 301</span>}</div>
<div class="code-line"><span class="line-number"> 302</span></div>
<div class="code-line"><span class="line-number"> 303</span>.device-image-large {</div>
<div class="code-line"><span class="line-number"> 304</span>  width: 100%;</div>
<div class="code-line"><span class="line-number"> 305</span>  height: 400rpx;</div>
<div class="code-line"><span class="line-number"> 306</span>  border-radius: $border-radius-md;</div>
<div class="code-line"><span class="line-number"> 307</span>  overflow: hidden;</div>
<div class="code-line"><span class="line-number"> 308</span>}</div>
<div class="code-line"><span class="line-number"> 309</span></div>
<div class="code-line"><span class="line-number"> 310</span>/* 渐变背景 */</div>
<div class="code-line"><span class="line-number"> 311</span>.gradient-bg {</div>
<div class="code-line"><span class="line-number"> 312</span>  background: $primary-gradient;</div>
<div class="code-line"><span class="line-number"> 313</span>}</div>
<div class="code-line"><span class="line-number"> 314</span></div>
<div class="code-line"><span class="line-number"> 315</span>/* 空状态 */</div>
<div class="code-line"><span class="line-number"> 316</span>.empty-state {</div>
<div class="code-line"><span class="line-number"> 317</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 318</span>  flex-direction: column;</div>
<div class="code-line"><span class="line-number"> 319</span>  align-items: center;</div>
<div class="code-line"><span class="line-number"> 320</span>  justify-content: center;</div>
<div class="code-line"><span class="line-number"> 321</span>  padding: 100rpx 40rpx;</div>
<div class="code-line"><span class="line-number"> 322</span>  text-align: center;</div>
<div class="code-line"><span class="line-number"> 323</span>}</div>
<div class="code-line"><span class="line-number"> 324</span></div>
<div class="code-line"><span class="line-number"> 325</span>.empty-image {</div>
<div class="code-line"><span class="line-number"> 326</span>  width: 200rpx;</div>
<div class="code-line"><span class="line-number"> 327</span>  height: 200rpx;</div>
<div class="code-line"><span class="line-number"> 328</span>  margin-bottom: $margin-xl;</div>
<div class="code-line"><span class="line-number"> 329</span>  opacity: 0.6;</div>
<div class="code-line"><span class="line-number"> 330</span>}</div>
<div class="code-line"><span class="line-number"> 331</span></div>
<div class="code-line"><span class="line-number"> 332</span>.empty-text {</div>
<div class="code-line"><span class="line-number"> 333</span>  font-size: $font-size-base;</div>
<div class="code-line"><span class="line-number"> 334</span>  color: $text-tertiary;</div>
<div class="code-line"><span class="line-number"> 335</span>  margin-bottom: $margin-xl;</div>
<div class="code-line"><span class="line-number"> 336</span>}</div>
<div class="code-line"><span class="line-number"> 337</span></div>
<div class="code-line"><span class="line-number"> 338</span>/* 加载状态 */</div>
<div class="code-line"><span class="line-number"> 339</span>.loading-container {</div>
<div class="code-line"><span class="line-number"> 340</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 341</span>  flex-direction: column;</div>
<div class="code-line"><span class="line-number"> 342</span>  align-items: center;</div>
<div class="code-line"><span class="line-number"> 343</span>  justify-content: center;</div>
<div class="code-line"><span class="line-number"> 344</span>  padding: 80rpx;</div>
<div class="code-line"><span class="line-number"> 345</span>}</div>
<div class="code-line"><span class="line-number"> 346</span></div>
<div class="code-line"><span class="line-number"> 347</span>.loading-text {</div>
<div class="code-line"><span class="line-number"> 348</span>  margin-top: $margin-md;</div>
<div class="code-line"><span class="line-number"> 349</span>  color: $text-tertiary;</div>
<div class="code-line"><span class="line-number"> 350</span>  font-size: $font-size-sm;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 351</span>}</div>
<div class="code-line"><span class="line-number"> 352</span></div>
<div class="code-line"><span class="line-number"> 353</span>/* 底部操作栏 */</div>
<div class="code-line"><span class="line-number"> 354</span>.bottom-action-bar {</div>
<div class="code-line"><span class="line-number"> 355</span>  position: fixed;</div>
<div class="code-line"><span class="line-number"> 356</span>  bottom: 0;</div>
<div class="code-line"><span class="line-number"> 357</span>  left: 0;</div>
<div class="code-line"><span class="line-number"> 358</span>  right: 0;</div>
<div class="code-line"><span class="line-number"> 359</span>  background: $bg-primary;</div>
<div class="code-line"><span class="line-number"> 360</span>  border-top: 1rpx solid $border-color;</div>
<div class="code-line"><span class="line-number"> 361</span>  padding: $padding-md;</div>
<div class="code-line"><span class="line-number"> 362</span>  padding-bottom: calc(env(safe-area-inset-bottom) + #{$padding-md});</div>
<div class="code-line"><span class="line-number"> 363</span>  z-index: $z-index-popup;</div>
<div class="code-line"><span class="line-number"> 364</span>}</div>
<div class="code-line"><span class="line-number"> 365</span></div>
<div class="code-line"><span class="line-number"> 366</span>/* 标签页 */</div>
<div class="code-line"><span class="line-number"> 367</span>.tab-container {</div>
<div class="code-line"><span class="line-number"> 368</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 369</span>  background: $bg-primary;</div>
<div class="code-line"><span class="line-number"> 370</span>  border-bottom: 1rpx solid $border-color;</div>
<div class="code-line"><span class="line-number"> 371</span>  overflow-x: auto;</div>
<div class="code-line"><span class="line-number"> 372</span>}</div>
<div class="code-line"><span class="line-number"> 373</span></div>
<div class="code-line"><span class="line-number"> 374</span>.tab-item {</div>
<div class="code-line"><span class="line-number"> 375</span>  flex-shrink: 0;</div>
<div class="code-line"><span class="line-number"> 376</span>  padding: $padding-lg $padding-xl;</div>
<div class="code-line"><span class="line-number"> 377</span>  font-size: $font-size-base;</div>
<div class="code-line"><span class="line-number"> 378</span>  color: $text-secondary;</div>
<div class="code-line"><span class="line-number"> 379</span>  text-align: center;</div>
<div class="code-line"><span class="line-number"> 380</span>  border-bottom: 4rpx solid transparent;</div>
<div class="code-line"><span class="line-number"> 381</span>  transition: $transition-base;</div>
<div class="code-line"><span class="line-number"> 382</span>  white-space: nowrap;</div>
<div class="code-line"><span class="line-number"> 383</span>}</div>
<div class="code-line"><span class="line-number"> 384</span></div>
<div class="code-line"><span class="line-number"> 385</span>.tab-item.active {</div>
<div class="code-line"><span class="line-number"> 386</span>  color: $primary-color;</div>
<div class="code-line"><span class="line-number"> 387</span>  border-bottom-color: $primary-color;</div>
<div class="code-line"><span class="line-number"> 388</span>  font-weight: $font-weight-bold;</div>
<div class="code-line"><span class="line-number"> 389</span>}</div>
<div class="code-line"><span class="line-number"> 390</span></div>
<div class="code-line"><span class="line-number"> 391</span>/* ==================== 动画效果 ==================== */</div>
<div class="code-line"><span class="line-number"> 392</span>/* 渐入动画 */</div>
<div class="code-line"><span class="line-number"> 393</span>@keyframes fadeIn {</div>
<div class="code-line"><span class="line-number"> 394</span>  from {</div>
<div class="code-line"><span class="line-number"> 395</span>    opacity: 0;</div>
<div class="code-line"><span class="line-number"> 396</span>    transform: translateY(30rpx);</div>
<div class="code-line"><span class="line-number"> 397</span>  }</div>
<div class="code-line"><span class="line-number"> 398</span>  to {</div>
<div class="code-line"><span class="line-number"> 399</span>    opacity: 1;</div>
<div class="code-line"><span class="line-number"> 400</span>    transform: translateY(0);</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 401</span>  }</div>
<div class="code-line"><span class="line-number"> 402</span>}</div>
<div class="code-line"><span class="line-number"> 403</span></div>
<div class="code-line"><span class="line-number"> 404</span>.fade-in {</div>
<div class="code-line"><span class="line-number"> 405</span>  animation: fadeIn $animation-duration-base ease-out;</div>
<div class="code-line"><span class="line-number"> 406</span>}</div>
<div class="code-line"><span class="line-number"> 407</span></div>
<div class="code-line"><span class="line-number"> 408</span>/* 缩放动画 */</div>
<div class="code-line"><span class="line-number"> 409</span>@keyframes scaleIn {</div>
<div class="code-line"><span class="line-number"> 410</span>  from {</div>
<div class="code-line"><span class="line-number"> 411</span>    opacity: 0;</div>
<div class="code-line"><span class="line-number"> 412</span>    transform: scale(0.8);</div>
<div class="code-line"><span class="line-number"> 413</span>  }</div>
<div class="code-line"><span class="line-number"> 414</span>  to {</div>
<div class="code-line"><span class="line-number"> 415</span>    opacity: 1;</div>
<div class="code-line"><span class="line-number"> 416</span>    transform: scale(1);</div>
<div class="code-line"><span class="line-number"> 417</span>  }</div>
<div class="code-line"><span class="line-number"> 418</span>}</div>
<div class="code-line"><span class="line-number"> 419</span></div>
<div class="code-line"><span class="line-number"> 420</span>.scale-in {</div>
<div class="code-line"><span class="line-number"> 421</span>  animation: scaleIn $animation-duration-base ease-out;</div>
<div class="code-line"><span class="line-number"> 422</span>}</div>
<div class="code-line"><span class="line-number"> 423</span></div>
<div class="code-line"><span class="line-number"> 424</span>/* 点击反馈 */</div>
<div class="code-line"><span class="line-number"> 425</span>.tap-highlight {</div>
<div class="code-line"><span class="line-number"> 426</span>  transition: $transition-fast;</div>
<div class="code-line"><span class="line-number"> 427</span>}</div>
<div class="code-line"><span class="line-number"> 428</span></div>
<div class="code-line"><span class="line-number"> 429</span>.tap-highlight:active {</div>
<div class="code-line"><span class="line-number"> 430</span>  opacity: 0.8;</div>
<div class="code-line"><span class="line-number"> 431</span>  transform: scale(0.98);</div>
<div class="code-line"><span class="line-number"> 432</span>}</div>
<div class="code-line"><span class="line-number"> 433</span></div>
<div class="code-line"><span class="line-number"> 434</span>/* ==================== 响应式设计 ==================== */</div>
<div class="code-line"><span class="line-number"> 435</span>/* 小屏幕优化 */</div>
<div class="code-line"><span class="line-number"> 436</span>@media (max-width: 750rpx) {</div>
<div class="code-line"><span class="line-number"> 437</span>  .page-container {</div>
<div class="code-line"><span class="line-number"> 438</span>    padding: $padding-base;</div>
<div class="code-line"><span class="line-number"> 439</span>  }</div>
<div class="code-line"><span class="line-number"> 440</span>  </div>
<div class="code-line"><span class="line-number"> 441</span>  .content-card {</div>
<div class="code-line"><span class="line-number"> 442</span>    padding: $padding-md;</div>
<div class="code-line"><span class="line-number"> 443</span>  }</div>
<div class="code-line"><span class="line-number"> 444</span>  </div>
<div class="code-line"><span class="line-number"> 445</span>  .card-title {</div>
<div class="code-line"><span class="line-number"> 446</span>    font-size: $font-size-base;</div>
<div class="code-line"><span class="line-number"> 447</span>  }</div>
<div class="code-line"><span class="line-number"> 448</span>}</div>
<div class="code-line"><span class="line-number"> 449</span></div>
<div class="code-line"><span class="line-number"> 450</span>/* 安全区域适配 */</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 451</span>.safe-area-bottom {</div>
<div class="code-line"><span class="line-number"> 452</span>  padding-bottom: calc(env(safe-area-inset-bottom) + 20rpx);</div>
<div class="code-line"><span class="line-number"> 453</span>}</div>
<div class="code-line"><span class="line-number"> 454</span></div>
<div class="code-line"><span class="line-number"> 455</span>.safe-area-top {</div>
<div class="code-line"><span class="line-number"> 456</span>  padding-top: calc(env(safe-area-inset-top) + 20rpx);</div>
<div class="code-line"><span class="line-number"> 457</span>}</div>
<div class="code-line"><span class="line-number"> 458</span></div>
<div class="code-line"><span class="line-number"> 459</span>/* ==================== 深色模式支持 ==================== */</div>
<div class="code-line"><span class="line-number"> 460</span>/* 暗色主题变量（预留） */</div>
<div class="code-line"><span class="line-number"> 461</span>@media (prefers-color-scheme: dark) {</div>
<div class="code-line"><span class="line-number"> 462</span>  // 预留暗色模式样式</div>
<div class="code-line"><span class="line-number"> 463</span>  // page {</div>
<div class="code-line"><span class="line-number"> 464</span>  //   background-color: #1a1a1a;</div>
<div class="code-line"><span class="line-number"> 465</span>  //   color: #ffffff;</div>
<div class="code-line"><span class="line-number"> 466</span>  // }</div>
<div class="code-line"><span class="line-number"> 467</span>}</div>
<div class="code-line"><span class="line-number"> 468</span></div>
<div class="code-line"><span class="line-number"> 469</span>/* ==================== uView组件自定义样式 ==================== */</div>
<div class="code-line"><span class="line-number"> 470</span>/* 自定义uView按钮样式 */</div>
<div class="code-line"><span class="line-number"> 471</span>.u-button {</div>
<div class="code-line"><span class="line-number"> 472</span>  border-radius: $border-radius-base !important;</div>
<div class="code-line"><span class="line-number"> 473</span>  font-weight: $font-weight-medium !important;</div>
<div class="code-line"><span class="line-number"> 474</span>}</div>
<div class="code-line"><span class="line-number"> 475</span></div>
<div class="code-line"><span class="line-number"> 476</span>.u-button--primary {</div>
<div class="code-line"><span class="line-number"> 477</span>  background: $primary-gradient !important;</div>
<div class="code-line"><span class="line-number"> 478</span>  border: none !important;</div>
<div class="code-line"><span class="line-number"> 479</span>}</div>
<div class="code-line"><span class="line-number"> 480</span></div>
<div class="code-line"><span class="line-number"> 481</span>/* 自定义uView输入框样式 */</div>
<div class="code-line"><span class="line-number"> 482</span>.u-input {</div>
<div class="code-line"><span class="line-number"> 483</span>  border-radius: $border-radius-base !important;</div>
<div class="code-line"><span class="line-number"> 484</span>  background: $bg-tertiary !important;</div>
<div class="code-line"><span class="line-number"> 485</span>  border: 1rpx solid $border-color !important;</div>
<div class="code-line"><span class="line-number"> 486</span>}</div>
<div class="code-line"><span class="line-number"> 487</span></div>
<div class="code-line"><span class="line-number"> 488</span>.u-input--focus {</div>
<div class="code-line"><span class="line-number"> 489</span>  border-color: $primary-color !important;</div>
<div class="code-line"><span class="line-number"> 490</span>}</div>
<div class="code-line"><span class="line-number"> 491</span></div>
<div class="code-line"><span class="line-number"> 492</span>/* 自定义uView卡片样式 */</div>
<div class="code-line"><span class="line-number"> 493</span>.u-card {</div>
<div class="code-line"><span class="line-number"> 494</span>  border-radius: $border-radius-md !important;</div>
<div class="code-line"><span class="line-number"> 495</span>  box-shadow: $box-shadow-light !important;</div>
<div class="code-line"><span class="line-number"> 496</span>}</div>
<div class="code-line"><span class="line-number"> 497</span></div>
<div class="code-line"><span class="line-number"> 498</span>/* ==================== 图标字体修复 ==================== */</div>
<div class="code-line"><span class="line-number"> 499</span>/* 确保uview-plus图标字体正确加载和显示 */</div>
<div class="code-line"><span class="line-number"> 500</span>@font-face {</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 501</span>  font-family: 'uicon-iconfont';</div>
<div class="code-line"><span class="line-number"> 502</span>  src: url('/static/uicon-iconfont.ttf') format('truetype');</div>
<div class="code-line"><span class="line-number"> 503</span>  font-weight: normal;</div>
<div class="code-line"><span class="line-number"> 504</span>  font-style: normal;</div>
<div class="code-line"><span class="line-number"> 505</span>  font-display: swap;</div>
<div class="code-line"><span class="line-number"> 506</span>}</div>
<div class="code-line"><span class="line-number"> 507</span></div>
<div class="code-line"><span class="line-number"> 508</span>/* 强制应用字体到uview图标 */</div>
<div class="code-line"><span class="line-number"> 509</span>.u-iconfont {</div>
<div class="code-line"><span class="line-number"> 510</span>  font-family: 'uicon-iconfont' !important;</div>
<div class="code-line"><span class="line-number"> 511</span>  font-style: normal !important;</div>
<div class="code-line"><span class="line-number"> 512</span>  -webkit-font-smoothing: antialiased !important;</div>
<div class="code-line"><span class="line-number"> 513</span>  -moz-osx-font-smoothing: grayscale !important;</div>
<div class="code-line"><span class="line-number"> 514</span>}</div>
<div class="code-line"><span class="line-number"> 515</span></div>
<div class="code-line"><span class="line-number"> 516</span>/* Android设备字体渲染优化 */</div>
<div class="code-line"><span class="line-number"> 517</span>/* #ifdef APP-PLUS-NVUE */</div>
<div class="code-line"><span class="line-number"> 518</span>.u-icon__icon {</div>
<div class="code-line"><span class="line-number"> 519</span>  font-family: 'uicon-iconfont';</div>
<div class="code-line"><span class="line-number"> 520</span>  font-style: normal;</div>
<div class="code-line"><span class="line-number"> 521</span>}</div>
<div class="code-line"><span class="line-number"> 522</span>/* #endif */</div>
<div class="code-line"><span class="line-number"> 523</span>&lt;/style&gt;</div>
<div class="file-header">文件: ./manifest.json</div>
<div class="code-line"><span class="line-number"> 524</span>{</div>
<div class="code-line"><span class="line-number"> 525</span>    "name" : "E租贝",</div>
<div class="code-line"><span class="line-number"> 526</span>    "appid" : "__UNI__2049EF1",</div>
<div class="code-line"><span class="line-number"> 527</span>    "description" : "E租贝 - 专业MVR设备租赁平台",</div>
<div class="code-line"><span class="line-number"> 528</span>    "versionName" : "1.0.0",</div>
<div class="code-line"><span class="line-number"> 529</span>    "versionCode" : 1,</div>
<div class="code-line"><span class="line-number"> 530</span>    "transformPx" : false,</div>
<div class="code-line"><span class="line-number"> 531</span>    "quickapp" : {},</div>
<div class="code-line"><span class="line-number"> 532</span>    "mp-weixin" : {</div>
<div class="code-line"><span class="line-number"> 533</span>        "appid" : "wxe0074720dbaf7ee9",</div>
<div class="code-line"><span class="line-number"> 534</span>        "mergeVirtualHostAttributes" : true,</div>
<div class="code-line"><span class="line-number"> 535</span>        "setting" : {</div>
<div class="code-line"><span class="line-number"> 536</span>            "urlCheck" : false,</div>
<div class="code-line"><span class="line-number"> 537</span>            "minified" : true,</div>
<div class="code-line"><span class="line-number"> 538</span>            "postcss" : true</div>
<div class="code-line"><span class="line-number"> 539</span>        },</div>
<div class="code-line"><span class="line-number"> 540</span>        "usingComponents" : true,</div>
<div class="code-line"><span class="line-number"> 541</span>        "permission" : {</div>
<div class="code-line"><span class="line-number"> 542</span>            "scope.userLocation" : {</div>
<div class="code-line"><span class="line-number"> 543</span>                "desc" : "您的位置信息将用于设备定位和导航"</div>
<div class="code-line"><span class="line-number"> 544</span>            }</div>
<div class="code-line"><span class="line-number"> 545</span>        },</div>
<div class="code-line"><span class="line-number"> 546</span>        "requiredBackgroundModes" : [ "location" ]</div>
<div class="code-line"><span class="line-number"> 547</span>    },</div>
<div class="code-line"><span class="line-number"> 548</span>    "mp-alipay" : {</div>
<div class="code-line"><span class="line-number"> 549</span>        "usingComponents" : true,</div>
<div class="code-line"><span class="line-number"> 550</span>        "component2" : true</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 551</span>    },</div>
<div class="code-line"><span class="line-number"> 552</span>    "mp-baidu" : {</div>
<div class="code-line"><span class="line-number"> 553</span>        "usingComponents" : true</div>
<div class="code-line"><span class="line-number"> 554</span>    },</div>
<div class="code-line"><span class="line-number"> 555</span>    "mp-toutiao" : {</div>
<div class="code-line"><span class="line-number"> 556</span>        "usingComponents" : true</div>
<div class="code-line"><span class="line-number"> 557</span>    },</div>
<div class="code-line"><span class="line-number"> 558</span>    "mp-qq" : {</div>
<div class="code-line"><span class="line-number"> 559</span>        "usingComponents" : true</div>
<div class="code-line"><span class="line-number"> 560</span>    },</div>
<div class="code-line"><span class="line-number"> 561</span>    "h5" : {</div>
<div class="code-line"><span class="line-number"> 562</span>        "title" : "E租贝",</div>
<div class="code-line"><span class="line-number"> 563</span>        "domain" : "localhost",</div>
<div class="code-line"><span class="line-number"> 564</span>        "router" : {</div>
<div class="code-line"><span class="line-number"> 565</span>            "mode" : "history"</div>
<div class="code-line"><span class="line-number"> 566</span>        },</div>
<div class="code-line"><span class="line-number"> 567</span>        "devServer" : {</div>
<div class="code-line"><span class="line-number"> 568</span>            "proxy" : {</div>
<div class="code-line"><span class="line-number"> 569</span>                "/api" : {</div>
<div class="code-line"><span class="line-number"> 570</span>                    "target" : "http://localhost:3001",</div>
<div class="code-line"><span class="line-number"> 571</span>                    "changeOrigin" : true,</div>
<div class="code-line"><span class="line-number"> 572</span>                    "pathRewrite" : {</div>
<div class="code-line"><span class="line-number"> 573</span>                        "^/api" : ""</div>
<div class="code-line"><span class="line-number"> 574</span>                    }</div>
<div class="code-line"><span class="line-number"> 575</span>                }</div>
<div class="code-line"><span class="line-number"> 576</span>            }</div>
<div class="code-line"><span class="line-number"> 577</span>        }</div>
<div class="code-line"><span class="line-number"> 578</span>    },</div>
<div class="code-line"><span class="line-number"> 579</span>    "uniStatistics" : {</div>
<div class="code-line"><span class="line-number"> 580</span>        "enable" : false</div>
<div class="code-line"><span class="line-number"> 581</span>    },</div>
<div class="code-line"><span class="line-number"> 582</span>    "vueVersion" : "3",</div>
<div class="code-line"><span class="line-number"> 583</span>    "app-plus" : {</div>
<div class="code-line"><span class="line-number"> 584</span>        "usingComponents" : true,</div>
<div class="code-line"><span class="line-number"> 585</span>        "nvueStyleCompiler" : "uni-app",</div>
<div class="code-line"><span class="line-number"> 586</span>        "compilerVersion" : 3,</div>
<div class="code-line"><span class="line-number"> 587</span>        "splashscreen" : {</div>
<div class="code-line"><span class="line-number"> 588</span>            "alwaysShowBeforeRender" : true,</div>
<div class="code-line"><span class="line-number"> 589</span>            "waiting" : false,</div>
<div class="code-line"><span class="line-number"> 590</span>            "autoclose" : true,</div>
<div class="code-line"><span class="line-number"> 591</span>            "delay" : 2000</div>
<div class="code-line"><span class="line-number"> 592</span>        },</div>
<div class="code-line"><span class="line-number"> 593</span>        "modules" : {</div>
<div class="code-line"><span class="line-number"> 594</span>            "Maps" : {</div>
<div class="code-line"><span class="line-number"> 595</span>                "description" : "地图定位服务"</div>
<div class="code-line"><span class="line-number"> 596</span>            },</div>
<div class="code-line"><span class="line-number"> 597</span>            "Camera" : {</div>
<div class="code-line"><span class="line-number"> 598</span>                "description" : "相机拍照"</div>
<div class="code-line"><span class="line-number"> 599</span>            },</div>
<div class="code-line"><span class="line-number"> 600</span>            "Gallery" : {</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 601</span>                "description" : "相册选择"</div>
<div class="code-line"><span class="line-number"> 602</span>            },</div>
<div class="code-line"><span class="line-number"> 603</span>            "Geolocation" : {</div>
<div class="code-line"><span class="line-number"> 604</span>                "description" : "定位服务"</div>
<div class="code-line"><span class="line-number"> 605</span>            }</div>
<div class="code-line"><span class="line-number"> 606</span>        },</div>
<div class="code-line"><span class="line-number"> 607</span>        "distribute" : {</div>
<div class="code-line"><span class="line-number"> 608</span>            "android" : {</div>
<div class="code-line"><span class="line-number"> 609</span>                "permissions" : [</div>
<div class="code-line"><span class="line-number"> 610</span>                    "&lt;uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 611</span>                    "&lt;uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 612</span>                    "&lt;uses-permission android:name=\"android.permission.VIBRATE\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 613</span>                    "&lt;uses-permission android:name=\"android.permission.READ_LOGS\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 614</span>                    "&lt;uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 615</span>                    "&lt;uses-feature android:name=\"android.hardware.camera.autofocus\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 616</span>                    "&lt;uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 617</span>                    "&lt;uses-permission android:name=\"android.permission.CAMERA\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 618</span>                    "&lt;uses-permission android:name=\"android.permission.GET_ACCOUNTS\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 619</span>                    "&lt;uses-permission android:name=\"android.permission.READ_PHONE_STATE\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 620</span>                    "&lt;uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 621</span>                    "&lt;uses-permission android:name=\"android.permission.WAKE_LOCK\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 622</span>                    "&lt;uses-permission android:name=\"android.permission.FLASHLIGHT\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 623</span>                    "&lt;uses-feature android:name=\"android.hardware.camera\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 624</span>                    "&lt;uses-permission android:name=\"android.permission.WRITE_SETTINGS\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 625</span>                    "&lt;uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" /&gt;",</div>
<div class="code-line"><span class="line-number"> 626</span>                    "&lt;uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" /&gt;"</div>
<div class="code-line"><span class="line-number"> 627</span>                ],</div>
<div class="code-line"><span class="line-number"> 628</span>                "abiFilters" : [ "armeabi-v7a", "arm64-v8a" ],</div>
<div class="code-line"><span class="line-number"> 629</span>                "targetSdkVersion" : 30,</div>
<div class="code-line"><span class="line-number"> 630</span>                "minSdkVersion" : 21</div>
<div class="code-line"><span class="line-number"> 631</span>            },</div>
<div class="code-line"><span class="line-number"> 632</span>            "ios" : {</div>
<div class="code-line"><span class="line-number"> 633</span>                "dSYMs" : false</div>
<div class="code-line"><span class="line-number"> 634</span>            },</div>
<div class="code-line"><span class="line-number"> 635</span>            "icons" : {</div>
<div class="code-line"><span class="line-number"> 636</span>                "android" : {</div>
<div class="code-line"><span class="line-number"> 637</span>                    "hdpi" : "unpackage/res/icons/72x72.png",</div>
<div class="code-line"><span class="line-number"> 638</span>                    "xhdpi" : "unpackage/res/icons/96x96.png",</div>
<div class="code-line"><span class="line-number"> 639</span>                    "xxhdpi" : "unpackage/res/icons/144x144.png",</div>
<div class="code-line"><span class="line-number"> 640</span>                    "xxxhdpi" : "unpackage/res/icons/192x192.png"</div>
<div class="code-line"><span class="line-number"> 641</span>                },</div>
<div class="code-line"><span class="line-number"> 642</span>                "ios" : {</div>
<div class="code-line"><span class="line-number"> 643</span>                    "appstore" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 644</span>                    "ipad" : {</div>
<div class="code-line"><span class="line-number"> 645</span>                        "app" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 646</span>                        "app@2x" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 647</span>                        "notification" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 648</span>                        "notification@2x" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 649</span>                        "proapp@2x" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 650</span>                        "settings" : "static/logo.png",</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 651</span>                        "settings@2x" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 652</span>                        "spotlight" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 653</span>                        "spotlight@2x" : "static/logo.png"</div>
<div class="code-line"><span class="line-number"> 654</span>                    },</div>
<div class="code-line"><span class="line-number"> 655</span>                    "iphone" : {</div>
<div class="code-line"><span class="line-number"> 656</span>                        "app@2x" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 657</span>                        "app@3x" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 658</span>                        "notification@2x" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 659</span>                        "notification@3x" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 660</span>                        "settings@2x" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 661</span>                        "settings@3x" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 662</span>                        "spotlight@2x" : "static/logo.png",</div>
<div class="code-line"><span class="line-number"> 663</span>                        "spotlight@3x" : "static/logo.png"</div>
<div class="code-line"><span class="line-number"> 664</span>                    }</div>
<div class="code-line"><span class="line-number"> 665</span>                }</div>
<div class="code-line"><span class="line-number"> 666</span>            },</div>
<div class="code-line"><span class="line-number"> 667</span>            "splashscreen" : {</div>
<div class="code-line"><span class="line-number"> 668</span>                "androidStyle" : "default",</div>
<div class="code-line"><span class="line-number"> 669</span>                "android" : {</div>
<div class="code-line"><span class="line-number"> 670</span>                    "hdpi" : "static/app/480x762.png",</div>
<div class="code-line"><span class="line-number"> 671</span>                    "xhdpi" : "static/app/720x1242.png",</div>
<div class="code-line"><span class="line-number"> 672</span>                    "xxhdpi" : "static/app/750x1334.png"</div>
<div class="code-line"><span class="line-number"> 673</span>                },</div>
<div class="code-line"><span class="line-number"> 674</span>                "useOriginalMsgbox" : true,</div>
<div class="code-line"><span class="line-number"> 675</span>                "waiting" : false,</div>
<div class="code-line"><span class="line-number"> 676</span>                "autoclose" : true,</div>
<div class="code-line"><span class="line-number"> 677</span>                "delay" : 2000</div>
<div class="code-line"><span class="line-number"> 678</span>            },</div>
<div class="code-line"><span class="line-number"> 679</span>            "sdkConfigs" : {</div>
<div class="code-line"><span class="line-number"> 680</span>                "maps" : {</div>
<div class="code-line"><span class="line-number"> 681</span>                    "amap" : {</div>
<div class="code-line"><span class="line-number"> 682</span>                        "appkey_ios" : "your_amap_ios_key_here",</div>
<div class="code-line"><span class="line-number"> 683</span>                        "appkey_android" : "your_amap_android_key_here"</div>
<div class="code-line"><span class="line-number"> 684</span>                    }</div>
<div class="code-line"><span class="line-number"> 685</span>                }</div>
<div class="code-line"><span class="line-number"> 686</span>            }</div>
<div class="code-line"><span class="line-number"> 687</span>        }</div>
<div class="code-line"><span class="line-number"> 688</span>    },</div>
<div class="code-line"><span class="line-number"> 689</span>    "locale" : "zh-Hans"</div>
<div class="code-line"><span class="line-number"> 690</span>}</div>
<div class="code-line"><span class="line-number"> 691</span></div>
<div class="file-header">文件: ./package.json</div>
<div class="code-line"><span class="line-number"> 692</span>{</div>
<div class="code-line"><span class="line-number"> 693</span>  "name": "mvr-rental-platform",</div>
<div class="code-line"><span class="line-number"> 694</span>  "version": "1.0.0",</div>
<div class="code-line"><span class="line-number"> 695</span>  "description": "MVR设备租赁平台 - 跨平台移动应用",</div>
<div class="code-line"><span class="line-number"> 696</span>  "main": "main.js",</div>
<div class="code-line"><span class="line-number"> 697</span>  "scripts": {</div>
<div class="code-line"><span class="line-number"> 698</span>    "dev:app": "uni build --watch --platform app",</div>
<div class="code-line"><span class="line-number"> 699</span>    "dev:h5": "uni build --watch --platform h5",</div>
<div class="code-line"><span class="line-number"> 700</span>    "dev:mp-weixin": "uni build --watch --platform mp-weixin",</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 701</span>    "dev:mp-alipay": "uni build --watch --platform mp-alipay",</div>
<div class="code-line"><span class="line-number"> 702</span>    "dev:mp-baidu": "uni build --watch --platform mp-baidu",</div>
<div class="code-line"><span class="line-number"> 703</span>    "dev:mp-toutiao": "uni build --watch --platform mp-toutiao",</div>
<div class="code-line"><span class="line-number"> 704</span>    "build:app": "uni build --platform app",</div>
<div class="code-line"><span class="line-number"> 705</span>    "build:h5": "uni build --platform h5",</div>
<div class="code-line"><span class="line-number"> 706</span>    "build:mp-weixin": "uni build --platform mp-weixin",</div>
<div class="code-line"><span class="line-number"> 707</span>    "build:mp-alipay": "uni build --platform mp-alipay",</div>
<div class="code-line"><span class="line-number"> 708</span>    "build:mp-baidu": "uni build --platform mp-baidu",</div>
<div class="code-line"><span class="line-number"> 709</span>    "build:mp-toutiao": "uni build --platform mp-toutiao",</div>
<div class="code-line"><span class="line-number"> 710</span>    "lint": "eslint --ext .js,.vue src/",</div>
<div class="code-line"><span class="line-number"> 711</span>    "lint:fix": "eslint --ext .js,.vue src/ --fix",</div>
<div class="code-line"><span class="line-number"> 712</span>    "test": "jest",</div>
<div class="code-line"><span class="line-number"> 713</span>    "test:watch": "jest --watch"</div>
<div class="code-line"><span class="line-number"> 714</span>  },</div>
<div class="code-line"><span class="line-number"> 715</span>  "keywords": [</div>
<div class="code-line"><span class="line-number"> 716</span>    "uniapp",</div>
<div class="code-line"><span class="line-number"> 717</span>    "vue3",</div>
<div class="code-line"><span class="line-number"> 718</span>    "mvr",</div>
<div class="code-line"><span class="line-number"> 719</span>    "rental",</div>
<div class="code-line"><span class="line-number"> 720</span>    "mobile",</div>
<div class="code-line"><span class="line-number"> 721</span>    "cross-platform"</div>
<div class="code-line"><span class="line-number"> 722</span>  ],</div>
<div class="code-line"><span class="line-number"> 723</span>  "author": "MVR租赁平台研发团队",</div>
<div class="code-line"><span class="line-number"> 724</span>  "license": "MIT",</div>
<div class="code-line"><span class="line-number"> 725</span>  "dependencies": {</div>
<div class="code-line"><span class="line-number"> 726</span>    "clipboard": "^2.0.11",</div>
<div class="code-line"><span class="line-number"> 727</span>    "dayjs": "^1.11.13"</div>
<div class="code-line"><span class="line-number"> 728</span>  },</div>
<div class="code-line"><span class="line-number"> 729</span>  "devDependencies": {</div>
<div class="code-line"><span class="line-number"> 730</span>    "@dcloudio/types": "^3.4.8",</div>
<div class="code-line"><span class="line-number"> 731</span>    "@types/node": "^20.10.0",</div>
<div class="code-line"><span class="line-number"> 732</span>    "eslint": "^8.56.0",</div>
<div class="code-line"><span class="line-number"> 733</span>    "eslint-plugin-vue": "^9.19.2",</div>
<div class="code-line"><span class="line-number"> 734</span>    "jest": "^29.7.0",</div>
<div class="code-line"><span class="line-number"> 735</span>    "typescript": "^5.3.3"</div>
<div class="code-line"><span class="line-number"> 736</span>  },</div>
<div class="code-line"><span class="line-number"> 737</span>  "engines": {</div>
<div class="code-line"><span class="line-number"> 738</span>    "node": "&gt;=16.0.0"</div>
<div class="code-line"><span class="line-number"> 739</span>  },</div>
<div class="code-line"><span class="line-number"> 740</span>  "browserslist": [</div>
<div class="code-line"><span class="line-number"> 741</span>    "Android &gt;= 4.4",</div>
<div class="code-line"><span class="line-number"> 742</span>    "iOS &gt;= 9"</div>
<div class="code-line"><span class="line-number"> 743</span>  ],</div>
<div class="code-line"><span class="line-number"> 744</span>  "uni-app": {</div>
<div class="code-line"><span class="line-number"> 745</span>    "scripts": {}</div>
<div class="code-line"><span class="line-number"> 746</span>  }</div>
<div class="code-line"><span class="line-number"> 747</span>}</div>
<div class="code-line"><span class="line-number"> 748</span></div>
<div class="file-header">文件: ./vite.config.js</div>
<div class="code-line"><span class="line-number"> 749</span>import { defineConfig } from 'vite'</div>
<div class="code-line"><span class="line-number"> 750</span>import uni from '@dcloudio/vite-plugin-uni'</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 751</span>import { resolve } from 'path'</div>
<div class="code-line"><span class="line-number"> 752</span></div>
<div class="code-line"><span class="line-number"> 753</span>// https://vitejs.dev/config/</div>
<div class="code-line"><span class="line-number"> 754</span>export default defineConfig({</div>
<div class="code-line"><span class="line-number"> 755</span>  plugins: [uni()],</div>
<div class="code-line"><span class="line-number"> 756</span>  resolve: {</div>
<div class="code-line"><span class="line-number"> 757</span>    alias: {</div>
<div class="code-line"><span class="line-number"> 758</span>      '@': resolve(__dirname, './')</div>
<div class="code-line"><span class="line-number"> 759</span>    }</div>
<div class="code-line"><span class="line-number"> 760</span>  }</div>
<div class="code-line"><span class="line-number"> 761</span>}) </div>
<div class="file-header">文件: ./api/request.js</div>
<div class="code-line"><span class="line-number"> 762</span>/**</div>
<div class="code-line"><span class="line-number"> 763</span> * MVR设备租赁平台 - HTTP请求封装</div>
<div class="code-line"><span class="line-number"> 764</span> * 基于uni.request封装，提供统一的API调用接口</div>
<div class="code-line"><span class="line-number"> 765</span> */</div>
<div class="code-line"><span class="line-number"> 766</span></div>
<div class="code-line"><span class="line-number"> 767</span>import { API_CONFIG } from './config.js'</div>
<div class="code-line"><span class="line-number"> 768</span></div>
<div class="code-line"><span class="line-number"> 769</span>/**</div>
<div class="code-line"><span class="line-number"> 770</span> * 统一的API请求封装服务</div>
<div class="code-line"><span class="line-number"> 771</span> * 基于uni.request封装，提供拦截器、错误处理、token管理等功能</div>
<div class="code-line"><span class="line-number"> 772</span> */</div>
<div class="code-line"><span class="line-number"> 773</span>class HttpRequest {</div>
<div class="code-line"><span class="line-number"> 774</span>  constructor() {</div>
<div class="code-line"><span class="line-number"> 775</span>    this.baseURL = API_CONFIG.BASE_URL</div>
<div class="code-line"><span class="line-number"> 776</span>    this.timeout = API_CONFIG.TIMEOUT</div>
<div class="code-line"><span class="line-number"> 777</span>    this.requestInterceptors = []</div>
<div class="code-line"><span class="line-number"> 778</span>    this.responseInterceptors = []</div>
<div class="code-line"><span class="line-number"> 779</span>    this.isRefreshing = false // 防止重复刷新token</div>
<div class="code-line"><span class="line-number"> 780</span>  }</div>
<div class="code-line"><span class="line-number"> 781</span></div>
<div class="code-line"><span class="line-number"> 782</span>  /**</div>
<div class="code-line"><span class="line-number"> 783</span>   * 添加请求拦截器</div>
<div class="code-line"><span class="line-number"> 784</span>   * @param {Function} handler 拦截处理函数</div>
<div class="code-line"><span class="line-number"> 785</span>   */</div>
<div class="code-line"><span class="line-number"> 786</span>  addRequestInterceptor(handler) {</div>
<div class="code-line"><span class="line-number"> 787</span>    this.requestInterceptors.push(handler)</div>
<div class="code-line"><span class="line-number"> 788</span>  }</div>
<div class="code-line"><span class="line-number"> 789</span></div>
<div class="code-line"><span class="line-number"> 790</span>  /**</div>
<div class="code-line"><span class="line-number"> 791</span>   * 添加响应拦截器</div>
<div class="code-line"><span class="line-number"> 792</span>   * @param {Function} successHandler 成功处理函数</div>
<div class="code-line"><span class="line-number"> 793</span>   * @param {Function} errorHandler 错误处理函数</div>
<div class="code-line"><span class="line-number"> 794</span>   */</div>
<div class="code-line"><span class="line-number"> 795</span>  addResponseInterceptor(successHandler, errorHandler) {</div>
<div class="code-line"><span class="line-number"> 796</span>    this.responseInterceptors.push({</div>
<div class="code-line"><span class="line-number"> 797</span>      success: successHandler,</div>
<div class="code-line"><span class="line-number"> 798</span>      error: errorHandler</div>
<div class="code-line"><span class="line-number"> 799</span>    })</div>
<div class="code-line"><span class="line-number"> 800</span>  }</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 801</span></div>
<div class="code-line"><span class="line-number"> 802</span>  /**</div>
<div class="code-line"><span class="line-number"> 803</span>   * 获取存储的token</div>
<div class="code-line"><span class="line-number"> 804</span>   */</div>
<div class="code-line"><span class="line-number"> 805</span>  getToken() {</div>
<div class="code-line"><span class="line-number"> 806</span>    try {</div>
<div class="code-line"><span class="line-number"> 807</span>      return uni.getStorageSync(API_CONFIG.STORAGE_KEYS.TOKEN) || ''</div>
<div class="code-line"><span class="line-number"> 808</span>    } catch (error) {</div>
<div class="code-line"><span class="line-number"> 809</span>      console.error('获取Token失败:', error)</div>
<div class="code-line"><span class="line-number"> 810</span>      return ''</div>
<div class="code-line"><span class="line-number"> 811</span>    }</div>
<div class="code-line"><span class="line-number"> 812</span>  }</div>
<div class="code-line"><span class="line-number"> 813</span></div>
<div class="code-line"><span class="line-number"> 814</span>  /**</div>
<div class="code-line"><span class="line-number"> 815</span>   * 设置token</div>
<div class="code-line"><span class="line-number"> 816</span>   * @param {String} token 访问令牌</div>
<div class="code-line"><span class="line-number"> 817</span>   */</div>
<div class="code-line"><span class="line-number"> 818</span>  setToken(token) {</div>
<div class="code-line"><span class="line-number"> 819</span>    try {</div>
<div class="code-line"><span class="line-number"> 820</span>      uni.setStorageSync(API_CONFIG.STORAGE_KEYS.TOKEN, token)</div>
<div class="code-line"><span class="line-number"> 821</span>    } catch (error) {</div>
<div class="code-line"><span class="line-number"> 822</span>      console.error('保存Token失败:', error)</div>
<div class="code-line"><span class="line-number"> 823</span>    }</div>
<div class="code-line"><span class="line-number"> 824</span>  }</div>
<div class="code-line"><span class="line-number"> 825</span></div>
<div class="code-line"><span class="line-number"> 826</span>  /**</div>
<div class="code-line"><span class="line-number"> 827</span>   * 获取刷新token</div>
<div class="code-line"><span class="line-number"> 828</span>   */</div>
<div class="code-line"><span class="line-number"> 829</span>  getRefreshToken() {</div>
<div class="code-line"><span class="line-number"> 830</span>    try {</div>
<div class="code-line"><span class="line-number"> 831</span>      return uni.getStorageSync(API_CONFIG.STORAGE_KEYS.REFRESH_TOKEN) || ''</div>
<div class="code-line"><span class="line-number"> 832</span>    } catch (error) {</div>
<div class="code-line"><span class="line-number"> 833</span>      console.error('获取RefreshToken失败:', error)</div>
<div class="code-line"><span class="line-number"> 834</span>      return ''</div>
<div class="code-line"><span class="line-number"> 835</span>    }</div>
<div class="code-line"><span class="line-number"> 836</span>  }</div>
<div class="code-line"><span class="line-number"> 837</span></div>
<div class="code-line"><span class="line-number"> 838</span>  /**</div>
<div class="code-line"><span class="line-number"> 839</span>   * 设置刷新token</div>
<div class="code-line"><span class="line-number"> 840</span>   * @param {String} refreshToken 刷新令牌</div>
<div class="code-line"><span class="line-number"> 841</span>   */</div>
<div class="code-line"><span class="line-number"> 842</span>  setRefreshToken(refreshToken) {</div>
<div class="code-line"><span class="line-number"> 843</span>    try {</div>
<div class="code-line"><span class="line-number"> 844</span>      uni.setStorageSync(API_CONFIG.STORAGE_KEYS.REFRESH_TOKEN, refreshToken)</div>
<div class="code-line"><span class="line-number"> 845</span>    } catch (error) {</div>
<div class="code-line"><span class="line-number"> 846</span>      console.error('保存RefreshToken失败:', error)</div>
<div class="code-line"><span class="line-number"> 847</span>    }</div>
<div class="code-line"><span class="line-number"> 848</span>  }</div>
<div class="code-line"><span class="line-number"> 849</span></div>
<div class="code-line"><span class="line-number"> 850</span>  /**</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 851</span>   * 清除所有token</div>
<div class="code-line"><span class="line-number"> 852</span>   */</div>
<div class="code-line"><span class="line-number"> 853</span>  clearTokens() {</div>
<div class="code-line"><span class="line-number"> 854</span>    try {</div>
<div class="code-line"><span class="line-number"> 855</span>      uni.removeStorageSync(API_CONFIG.STORAGE_KEYS.TOKEN)</div>
<div class="code-line"><span class="line-number"> 856</span>      uni.removeStorageSync(API_CONFIG.STORAGE_KEYS.REFRESH_TOKEN)</div>
<div class="code-line"><span class="line-number"> 857</span>      uni.removeStorageSync(API_CONFIG.STORAGE_KEYS.USER_INFO)</div>
<div class="code-line"><span class="line-number"> 858</span>    } catch (error) {</div>
<div class="code-line"><span class="line-number"> 859</span>      console.error('清除Token失败:', error)</div>
<div class="code-line"><span class="line-number"> 860</span>    }</div>
<div class="code-line"><span class="line-number"> 861</span>  }</div>
<div class="code-line"><span class="line-number"> 862</span></div>
<div class="code-line"><span class="line-number"> 863</span>  /**</div>
<div class="code-line"><span class="line-number"> 864</span>   * 构建完整URL</div>
<div class="code-line"><span class="line-number"> 865</span>   * @param {String} url 相对路径</div>
<div class="code-line"><span class="line-number"> 866</span>   */</div>
<div class="code-line"><span class="line-number"> 867</span>  buildURL(url) {</div>
<div class="code-line"><span class="line-number"> 868</span>    if (url.startsWith('http')) {</div>
<div class="code-line"><span class="line-number"> 869</span>      return url</div>
<div class="code-line"><span class="line-number"> 870</span>    }</div>
<div class="code-line"><span class="line-number"> 871</span>    return `${this.baseURL}${url.startsWith('/') ? '' : '/'}${url}`</div>
<div class="code-line"><span class="line-number"> 872</span>  }</div>
<div class="code-line"><span class="line-number"> 873</span></div>
<div class="code-line"><span class="line-number"> 874</span>  /**</div>
<div class="code-line"><span class="line-number"> 875</span>   * 处理请求配置</div>
<div class="code-line"><span class="line-number"> 876</span>   * @param {Object} config 请求配置</div>
<div class="code-line"><span class="line-number"> 877</span>   */</div>
<div class="code-line"><span class="line-number"> 878</span>  async processRequestConfig(config) {</div>
<div class="code-line"><span class="line-number"> 879</span>    // 设置默认配置</div>
<div class="code-line"><span class="line-number"> 880</span>    const requestConfig = {</div>
<div class="code-line"><span class="line-number"> 881</span>      url: this.buildURL(config.url),</div>
<div class="code-line"><span class="line-number"> 882</span>      method: config.method || 'GET',</div>
<div class="code-line"><span class="line-number"> 883</span>      data: config.data || {},</div>
<div class="code-line"><span class="line-number"> 884</span>      header: {</div>
<div class="code-line"><span class="line-number"> 885</span>        'Content-Type': 'application/json',</div>
<div class="code-line"><span class="line-number"> 886</span>        ...config.header</div>
<div class="code-line"><span class="line-number"> 887</span>      },</div>
<div class="code-line"><span class="line-number"> 888</span>      timeout: config.timeout || this.timeout</div>
<div class="code-line"><span class="line-number"> 889</span>    }</div>
<div class="code-line"><span class="line-number"> 890</span></div>
<div class="code-line"><span class="line-number"> 891</span>    // 添加认证头</div>
<div class="code-line"><span class="line-number"> 892</span>    const token = this.getToken()</div>
<div class="code-line"><span class="line-number"> 893</span>    if (token) {</div>
<div class="code-line"><span class="line-number"> 894</span>      requestConfig.header.Authorization = `Bearer ${token}`</div>
<div class="code-line"><span class="line-number"> 895</span>    }</div>
<div class="code-line"><span class="line-number"> 896</span></div>
<div class="code-line"><span class="line-number"> 897</span>    // 应用请求拦截器</div>
<div class="code-line"><span class="line-number"> 898</span>    let finalConfig = requestConfig</div>
<div class="code-line"><span class="line-number"> 899</span>    for (const interceptor of this.requestInterceptors) {</div>
<div class="code-line"><span class="line-number"> 900</span>      try {</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 901</span>        finalConfig = await interceptor(finalConfig)</div>
<div class="code-line"><span class="line-number"> 902</span>      } catch (error) {</div>
<div class="code-line"><span class="line-number"> 903</span>        console.error('请求拦截器错误:', error)</div>
<div class="code-line"><span class="line-number"> 904</span>      }</div>
<div class="code-line"><span class="line-number"> 905</span>    }</div>
<div class="code-line"><span class="line-number"> 906</span></div>
<div class="code-line"><span class="line-number"> 907</span>    return finalConfig</div>
<div class="code-line"><span class="line-number"> 908</span>  }</div>
<div class="code-line"><span class="line-number"> 909</span></div>
<div class="code-line"><span class="line-number"> 910</span>  /**</div>
<div class="code-line"><span class="line-number"> 911</span>   * 处理响应数据</div>
<div class="code-line"><span class="line-number"> 912</span>   * @param {Object} response 响应对象</div>
<div class="code-line"><span class="line-number"> 913</span>   */</div>
<div class="code-line"><span class="line-number"> 914</span>  async processResponse(response) {</div>
<div class="code-line"><span class="line-number"> 915</span>    // 应用响应拦截器</div>
<div class="code-line"><span class="line-number"> 916</span>    let processedResponse = response</div>
<div class="code-line"><span class="line-number"> 917</span>    for (const interceptor of this.responseInterceptors) {</div>
<div class="code-line"><span class="line-number"> 918</span>      try {</div>
<div class="code-line"><span class="line-number"> 919</span>        if (response.statusCode &gt;= 200 &amp;&amp; response.statusCode &lt; 300) {</div>
<div class="code-line"><span class="line-number"> 920</span>          if (interceptor.success) {</div>
<div class="code-line"><span class="line-number"> 921</span>            processedResponse = await interceptor.success(processedResponse)</div>
<div class="code-line"><span class="line-number"> 922</span>          }</div>
<div class="code-line"><span class="line-number"> 923</span>        } else {</div>
<div class="code-line"><span class="line-number"> 924</span>          if (interceptor.error) {</div>
<div class="code-line"><span class="line-number"> 925</span>            processedResponse = await interceptor.error(processedResponse)</div>
<div class="code-line"><span class="line-number"> 926</span>          }</div>
<div class="code-line"><span class="line-number"> 927</span>        }</div>
<div class="code-line"><span class="line-number"> 928</span>      } catch (error) {</div>
<div class="code-line"><span class="line-number"> 929</span>        console.error('响应拦截器错误:', error)</div>
<div class="code-line"><span class="line-number"> 930</span>      }</div>
<div class="code-line"><span class="line-number"> 931</span>    }</div>
<div class="code-line"><span class="line-number"> 932</span></div>
<div class="code-line"><span class="line-number"> 933</span>    return processedResponse</div>
<div class="code-line"><span class="line-number"> 934</span>  }</div>
<div class="code-line"><span class="line-number"> 935</span></div>
<div class="code-line"><span class="line-number"> 936</span>  /**</div>
<div class="code-line"><span class="line-number"> 937</span>   * 发送HTTP请求</div>
<div class="code-line"><span class="line-number"> 938</span>   * @param {Object} config 请求配置</div>
<div class="code-line"><span class="line-number"> 939</span>   */</div>
<div class="code-line"><span class="line-number"> 940</span>  async request(config) {</div>
<div class="code-line"><span class="line-number"> 941</span>    try {</div>
<div class="code-line"><span class="line-number"> 942</span>      const requestConfig = await this.processRequestConfig(config)</div>
<div class="code-line"><span class="line-number"> 943</span>      </div>
<div class="code-line"><span class="line-number"> 944</span>      return new Promise(async (resolve, reject) =&gt; {</div>
<div class="code-line"><span class="line-number"> 945</span>        const response = await uni.request(requestConfig)</div>
<div class="code-line"><span class="line-number"> 946</span>        </div>
<div class="code-line"><span class="line-number"> 947</span>        // 将请求配置附加到响应对象，供拦截器使用</div>
<div class="code-line"><span class="line-number"> 948</span>        response.config = requestConfig</div>
<div class="code-line"><span class="line-number"> 949</span>        </div>
<div class="code-line"><span class="line-number"> 950</span>        try {</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 951</span>          const processedResponse = await this.processResponse(response)</div>
<div class="code-line"><span class="line-number"> 952</span>          </div>
<div class="code-line"><span class="line-number"> 953</span>          if (processedResponse.statusCode &gt;= 200 &amp;&amp; processedResponse.statusCode &lt; 300) {</div>
<div class="code-line"><span class="line-number"> 954</span>            // 请求成功</div>
<div class="code-line"><span class="line-number"> 955</span>            const result = processedResponse.data</div>
<div class="code-line"><span class="line-number"> 956</span>            </div>
<div class="code-line"><span class="line-number"> 957</span>            // 检查业务状态码</div>
<div class="code-line"><span class="line-number"> 958</span>            if (result.code &amp;&amp; result.code === API_CONFIG.STATUS_CODES.SUCCESS) {</div>
<div class="code-line"><span class="line-number"> 959</span>              // 为了兼容性，我们返回完整的响应结构</div>
<div class="code-line"><span class="line-number"> 960</span>              // 但在data中添加原始data，这样新旧代码都能工作</div>
<div class="code-line"><span class="line-number"> 961</span>              const response = {</div>
<div class="code-line"><span class="line-number"> 962</span>                ...result,</div>
<div class="code-line"><span class="line-number"> 963</span>                originalData: result.data</div>
<div class="code-line"><span class="line-number"> 964</span>              }</div>
<div class="code-line"><span class="line-number"> 965</span>              resolve(response)</div>
<div class="code-line"><span class="line-number"> 966</span>            } else {</div>
<div class="code-line"><span class="line-number"> 967</span>              // 业务错误</div>
<div class="code-line"><span class="line-number"> 968</span>              const error = new Error(result.message || '请求失败')</div>
<div class="code-line"><span class="line-number"> 969</span>              error.code = result.code</div>
<div class="code-line"><span class="line-number"> 970</span>              error.response = processedResponse</div>
<div class="code-line"><span class="line-number"> 971</span>              reject(error)</div>
<div class="code-line"><span class="line-number"> 972</span>            }</div>
<div class="code-line"><span class="line-number"> 973</span>          } else {</div>
<div class="code-line"><span class="line-number"> 974</span>            // HTTP状态码错误</div>
<div class="code-line"><span class="line-number"> 975</span>            const error = new Error(this.getErrorMessage(processedResponse.statusCode))</div>
<div class="code-line"><span class="line-number"> 976</span>            error.statusCode = processedResponse.statusCode</div>
<div class="code-line"><span class="line-number"> 977</span>            error.response = processedResponse</div>
<div class="code-line"><span class="line-number"> 978</span>            reject(error)</div>
<div class="code-line"><span class="line-number"> 979</span>          }</div>
<div class="code-line"><span class="line-number"> 980</span>        } catch (error) {</div>
<div class="code-line"><span class="line-number"> 981</span>          reject(error)</div>
<div class="code-line"><span class="line-number"> 982</span>        }</div>
<div class="code-line"><span class="line-number"> 983</span>      })</div>
<div class="code-line"><span class="line-number"> 984</span>    } catch (error) {</div>
<div class="code-line"><span class="line-number"> 985</span>      console.error('请求发送失败:', error)</div>
<div class="code-line"><span class="line-number"> 986</span>      throw error</div>
<div class="code-line"><span class="line-number"> 987</span>    }</div>
<div class="code-line"><span class="line-number"> 988</span>  }</div>
<div class="code-line"><span class="line-number"> 989</span></div>
<div class="code-line"><span class="line-number"> 990</span>  /**</div>
<div class="code-line"><span class="line-number"> 991</span>   * 根据状态码获取错误信息</div>
<div class="code-line"><span class="line-number"> 992</span>   * @param {Number} statusCode HTTP状态码</div>
<div class="code-line"><span class="line-number"> 993</span>   */</div>
<div class="code-line"><span class="line-number"> 994</span>  getErrorMessage(statusCode) {</div>
<div class="code-line"><span class="line-number"> 995</span>    const errorMap = {</div>
<div class="code-line"><span class="line-number"> 996</span>      400: '请求参数错误',</div>
<div class="code-line"><span class="line-number"> 997</span>      401: '未授权，请重新登录',</div>
<div class="code-line"><span class="line-number"> 998</span>      403: '拒绝访问',</div>
<div class="code-line"><span class="line-number"> 999</span>      404: '请求资源不存在',</div>
<div class="code-line"><span class="line-number">1000</span>      405: '请求方法不允许',</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1001</span>      408: '请求超时',</div>
<div class="code-line"><span class="line-number">1002</span>      500: '服务器内部错误',</div>
<div class="code-line"><span class="line-number">1003</span>      502: '网关错误',</div>
<div class="code-line"><span class="line-number">1004</span>      503: '服务不可用',</div>
<div class="code-line"><span class="line-number">1005</span>      504: '网关超时'</div>
<div class="code-line"><span class="line-number">1006</span>    }</div>
<div class="code-line"><span class="line-number">1007</span>    </div>
<div class="code-line"><span class="line-number">1008</span>    return errorMap[statusCode] || `请求失败，状态码：${statusCode}`</div>
<div class="code-line"><span class="line-number">1009</span>  }</div>
<div class="code-line"><span class="line-number">1010</span></div>
<div class="code-line"><span class="line-number">1011</span>  /**</div>
<div class="code-line"><span class="line-number">1012</span>   * GET请求</div>
<div class="code-line"><span class="line-number">1013</span>   * @param {String} url 请求地址</div>
<div class="code-line"><span class="line-number">1014</span>   * @param {Object} params 请求参数</div>
<div class="code-line"><span class="line-number">1015</span>   * @param {Object} config 额外配置</div>
<div class="code-line"><span class="line-number">1016</span>   */</div>
<div class="code-line"><span class="line-number">1017</span>  get(url, params = {}, config = {}) {</div>
<div class="code-line"><span class="line-number">1018</span>    // 构建查询字符串</div>
<div class="code-line"><span class="line-number">1019</span>    if (Object.keys(params).length &gt; 0) {</div>
<div class="code-line"><span class="line-number">1020</span>      const queryString = Object.entries(params)</div>
<div class="code-line"><span class="line-number">1021</span>        .map(([key, value]) =&gt; `${encodeURIComponent(key)}=${encodeURIComponent(value)}`)</div>
<div class="code-line"><span class="line-number">1022</span>        .join('&amp;')</div>
<div class="code-line"><span class="line-number">1023</span>      url = `${url}${url.includes('?') ? '&amp;' : '?'}${queryString}`</div>
<div class="code-line"><span class="line-number">1024</span>    }</div>
<div class="code-line"><span class="line-number">1025</span>    </div>
<div class="code-line"><span class="line-number">1026</span>    return this.request({</div>
<div class="code-line"><span class="line-number">1027</span>      url,</div>
<div class="code-line"><span class="line-number">1028</span>      method: 'GET',</div>
<div class="code-line"><span class="line-number">1029</span>      ...config</div>
<div class="code-line"><span class="line-number">1030</span>    })</div>
<div class="code-line"><span class="line-number">1031</span>  }</div>
<div class="code-line"><span class="line-number">1032</span></div>
<div class="code-line"><span class="line-number">1033</span>  /**</div>
<div class="code-line"><span class="line-number">1034</span>   * POST请求</div>
<div class="code-line"><span class="line-number">1035</span>   * @param {String} url 请求地址</div>
<div class="code-line"><span class="line-number">1036</span>   * @param {Object} data 请求数据</div>
<div class="code-line"><span class="line-number">1037</span>   * @param {Object} config 额外配置</div>
<div class="code-line"><span class="line-number">1038</span>   */</div>
<div class="code-line"><span class="line-number">1039</span>  post(url, data = {}, config = {}) {</div>
<div class="code-line"><span class="line-number">1040</span>    return this.request({</div>
<div class="code-line"><span class="line-number">1041</span>      url,</div>
<div class="code-line"><span class="line-number">1042</span>      method: 'POST',</div>
<div class="code-line"><span class="line-number">1043</span>      data,</div>
<div class="code-line"><span class="line-number">1044</span>      ...config</div>
<div class="code-line"><span class="line-number">1045</span>    })</div>
<div class="code-line"><span class="line-number">1046</span>  }</div>
<div class="code-line"><span class="line-number">1047</span></div>
<div class="code-line"><span class="line-number">1048</span>  /**</div>
<div class="code-line"><span class="line-number">1049</span>   * PUT请求</div>
<div class="code-line"><span class="line-number">1050</span>   * @param {String} url 请求地址</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1051</span>   * @param {Object} data 请求数据</div>
<div class="code-line"><span class="line-number">1052</span>   * @param {Object} config 额外配置</div>
<div class="code-line"><span class="line-number">1053</span>   */</div>
<div class="code-line"><span class="line-number">1054</span>  put(url, data = {}, config = {}) {</div>
<div class="code-line"><span class="line-number">1055</span>    return this.request({</div>
<div class="code-line"><span class="line-number">1056</span>      url,</div>
<div class="code-line"><span class="line-number">1057</span>      method: 'PUT',</div>
<div class="code-line"><span class="line-number">1058</span>      data,</div>
<div class="code-line"><span class="line-number">1059</span>      ...config</div>
<div class="code-line"><span class="line-number">1060</span>    })</div>
<div class="code-line"><span class="line-number">1061</span>  }</div>
<div class="code-line"><span class="line-number">1062</span></div>
<div class="code-line"><span class="line-number">1063</span>  /**</div>
<div class="code-line"><span class="line-number">1064</span>   * DELETE请求</div>
<div class="code-line"><span class="line-number">1065</span>   * @param {String} url 请求地址</div>
<div class="code-line"><span class="line-number">1066</span>   * @param {Object} config 额外配置</div>
<div class="code-line"><span class="line-number">1067</span>   */</div>
<div class="code-line"><span class="line-number">1068</span>  delete(url, config = {}) {</div>
<div class="code-line"><span class="line-number">1069</span>    return this.request({</div>
<div class="code-line"><span class="line-number">1070</span>      url,</div>
<div class="code-line"><span class="line-number">1071</span>      method: 'DELETE',</div>
<div class="code-line"><span class="line-number">1072</span>      ...config</div>
<div class="code-line"><span class="line-number">1073</span>    })</div>
<div class="code-line"><span class="line-number">1074</span>  }</div>
<div class="code-line"><span class="line-number">1075</span></div>
<div class="code-line"><span class="line-number">1076</span>  /**</div>
<div class="code-line"><span class="line-number">1077</span>   * 文件上传</div>
<div class="code-line"><span class="line-number">1078</span>   * @param {String} url 上传地址</div>
<div class="code-line"><span class="line-number">1079</span>   * @param {String} filePath 文件路径</div>
<div class="code-line"><span class="line-number">1080</span>   * @param {Object} formData 额外表单数据</div>
<div class="code-line"><span class="line-number">1081</span>   * @param {Object} config 配置选项</div>
<div class="code-line"><span class="line-number">1082</span>   */</div>
<div class="code-line"><span class="line-number">1083</span>  upload(url, filePath, formData = {}, config = {}) {</div>
<div class="code-line"><span class="line-number">1084</span>    return new Promise((resolve, reject) =&gt; {</div>
<div class="code-line"><span class="line-number">1085</span>      const token = this.getToken()</div>
<div class="code-line"><span class="line-number">1086</span>      const header = {</div>
<div class="code-line"><span class="line-number">1087</span>        ...config.header</div>
<div class="code-line"><span class="line-number">1088</span>      }</div>
<div class="code-line"><span class="line-number">1089</span>      </div>
<div class="code-line"><span class="line-number">1090</span>      if (token) {</div>
<div class="code-line"><span class="line-number">1091</span>        header.Authorization = `Bearer ${token}`</div>
<div class="code-line"><span class="line-number">1092</span>      }</div>
<div class="code-line"><span class="line-number">1093</span></div>
<div class="code-line"><span class="line-number">1094</span>      uni.uploadFile({</div>
<div class="code-line"><span class="line-number">1095</span>        url: this.buildURL(url),</div>
<div class="code-line"><span class="line-number">1096</span>        filePath: filePath,</div>
<div class="code-line"><span class="line-number">1097</span>        name: config.name || 'file',</div>
<div class="code-line"><span class="line-number">1098</span>        formData: formData,</div>
<div class="code-line"><span class="line-number">1099</span>        header: header,</div>
<div class="code-line"><span class="line-number">1100</span>        success: (response) =&gt; {</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1101</span>          try {</div>
<div class="code-line"><span class="line-number">1102</span>            const result = JSON.parse(response.data)</div>
<div class="code-line"><span class="line-number">1103</span>            if (result.code === API_CONFIG.STATUS_CODES.SUCCESS) {</div>
<div class="code-line"><span class="line-number">1104</span>              resolve(result.data)</div>
<div class="code-line"><span class="line-number">1105</span>            } else {</div>
<div class="code-line"><span class="line-number">1106</span>              reject(new Error(result.message || '上传失败'))</div>
<div class="code-line"><span class="line-number">1107</span>            }</div>
<div class="code-line"><span class="line-number">1108</span>          } catch (error) {</div>
<div class="code-line"><span class="line-number">1109</span>            reject(new Error('响应数据格式错误'))</div>
<div class="code-line"><span class="line-number">1110</span>          }</div>
<div class="code-line"><span class="line-number">1111</span>        },</div>
<div class="code-line"><span class="line-number">1112</span>        fail: (error) =&gt; {</div>
<div class="code-line"><span class="line-number">1113</span>          reject(error)</div>
<div class="code-line"><span class="line-number">1114</span>        }</div>
<div class="code-line"><span class="line-number">1115</span>      })</div>
<div class="code-line"><span class="line-number">1116</span>    })</div>
<div class="code-line"><span class="line-number">1117</span>  }</div>
<div class="code-line"><span class="line-number">1118</span>}</div>
<div class="code-line"><span class="line-number">1119</span></div>
<div class="code-line"><span class="line-number">1120</span>// 创建实例</div>
<div class="code-line"><span class="line-number">1121</span>const http = new HttpRequest()</div>
<div class="code-line"><span class="line-number">1122</span></div>
<div class="code-line"><span class="line-number">1123</span>// 添加请求拦截器</div>
<div class="code-line"><span class="line-number">1124</span>http.addRequestInterceptor((config) =&gt; {</div>
<div class="code-line"><span class="line-number">1125</span>  // 显示加载提示</div>
<div class="code-line"><span class="line-number">1126</span>  // uni.showLoading({</div>
<div class="code-line"><span class="line-number">1127</span>  //   title: '加载中...',</div>
<div class="code-line"><span class="line-number">1128</span>  //   mask: true</div>
<div class="code-line"><span class="line-number">1129</span>  // })</div>
<div class="code-line"><span class="line-number">1130</span>  </div>
<div class="code-line"><span class="line-number">1131</span>  console.log('发送请求:', config)</div>
<div class="code-line"><span class="line-number">1132</span>  return config</div>
<div class="code-line"><span class="line-number">1133</span>})</div>
<div class="code-line"><span class="line-number">1134</span></div>
<div class="code-line"><span class="line-number">1135</span>// 添加响应拦截器</div>
<div class="code-line"><span class="line-number">1136</span>http.addResponseInterceptor(</div>
<div class="code-line"><span class="line-number">1137</span>  // 成功响应处理</div>
<div class="code-line"><span class="line-number">1138</span>  (response) =&gt; {</div>
<div class="code-line"><span class="line-number">1139</span>    // 隐藏加载提示</div>
<div class="code-line"><span class="line-number">1140</span>    uni.hideLoading()</div>
<div class="code-line"><span class="line-number">1141</span>    console.log('请求成功:', response)</div>
<div class="code-line"><span class="line-number">1142</span>    return response</div>
<div class="code-line"><span class="line-number">1143</span>  },</div>
<div class="code-line"><span class="line-number">1144</span>  // 错误响应处理</div>
<div class="code-line"><span class="line-number">1145</span>  async (response) =&gt; {</div>
<div class="code-line"><span class="line-number">1146</span>    // 隐藏加载提示</div>
<div class="code-line"><span class="line-number">1147</span>    uni.hideLoading()</div>
<div class="code-line"><span class="line-number">1148</span>    </div>
<div class="code-line"><span class="line-number">1149</span>    console.error('请求错误:', response)</div>
<div class="code-line"><span class="line-number">1150</span>    </div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1151</span>    // 处理token过期（但跳过refresh接口本身）</div>
<div class="code-line"><span class="line-number">1152</span>    if (response.statusCode === 401 &amp;&amp; !response.config?.header?.['X-Skip-Auth-Interceptor']) {</div>
<div class="code-line"><span class="line-number">1153</span>      const refreshToken = http.getRefreshToken()</div>
<div class="code-line"><span class="line-number">1154</span>      if (refreshToken &amp;&amp; !http.isRefreshing) {</div>
<div class="code-line"><span class="line-number">1155</span>        try {</div>
<div class="code-line"><span class="line-number">1156</span>          http.isRefreshing = true // 设置刷新标记</div>
<div class="code-line"><span class="line-number">1157</span>          console.log('🔄 Token过期，尝试刷新...')</div>
<div class="code-line"><span class="line-number">1158</span>          </div>
<div class="code-line"><span class="line-number">1159</span>          // 尝试刷新token，添加特殊标记避免再次触发拦截器</div>
<div class="code-line"><span class="line-number">1160</span>          const refreshResult = await http.request({</div>
<div class="code-line"><span class="line-number">1161</span>            url: '/auth/refresh',</div>
<div class="code-line"><span class="line-number">1162</span>            method: 'POST',</div>
<div class="code-line"><span class="line-number">1163</span>            data: {</div>
<div class="code-line"><span class="line-number">1164</span>              refreshToken: refreshToken</div>
<div class="code-line"><span class="line-number">1165</span>            },</div>
<div class="code-line"><span class="line-number">1166</span>            header: {</div>
<div class="code-line"><span class="line-number">1167</span>              'X-Skip-Auth-Interceptor': 'true' // 跳过认证拦截器</div>
<div class="code-line"><span class="line-number">1168</span>            }</div>
<div class="code-line"><span class="line-number">1169</span>          })</div>
<div class="code-line"><span class="line-number">1170</span>          </div>
<div class="code-line"><span class="line-number">1171</span>          console.log('✅ Token刷新成功:', refreshResult)</div>
<div class="code-line"><span class="line-number">1172</span>          </div>
<div class="code-line"><span class="line-number">1173</span>          // 更新token</div>
<div class="code-line"><span class="line-number">1174</span>          http.setToken(refreshResult.data.access_token)</div>
<div class="code-line"><span class="line-number">1175</span>          if (refreshResult.data.refresh_token) {</div>
<div class="code-line"><span class="line-number">1176</span>            http.setRefreshToken(refreshResult.data.refresh_token)</div>
<div class="code-line"><span class="line-number">1177</span>          }</div>
<div class="code-line"><span class="line-number">1178</span>          </div>
<div class="code-line"><span class="line-number">1179</span>          console.log('🔄 Token已更新，但需要手动重新发送请求')</div>
<div class="code-line"><span class="line-number">1180</span>          </div>
<div class="code-line"><span class="line-number">1181</span>          // 注意：这里我们不能直接重新发送原请求，因为拦截器的限制</div>
<div class="code-line"><span class="line-number">1182</span>          // 前端需要捕获这个特殊情况并重新发送请求</div>
<div class="code-line"><span class="line-number">1183</span>          // 我们返回一个特殊的响应，让调用方知道需要重试</div>
<div class="code-line"><span class="line-number">1184</span>          http.isRefreshing = false // 重置刷新标记</div>
<div class="code-line"><span class="line-number">1185</span>          return {</div>
<div class="code-line"><span class="line-number">1186</span>            ...response,</div>
<div class="code-line"><span class="line-number">1187</span>            statusCode: 200, // 改为成功状态</div>
<div class="code-line"><span class="line-number">1188</span>            data: {</div>
<div class="code-line"><span class="line-number">1189</span>              code: 401,</div>
<div class="code-line"><span class="line-number">1190</span>              message: 'Token已刷新，请重试',</div>
<div class="code-line"><span class="line-number">1191</span>              needRetry: true</div>
<div class="code-line"><span class="line-number">1192</span>            }</div>
<div class="code-line"><span class="line-number">1193</span>          }</div>
<div class="code-line"><span class="line-number">1194</span>        } catch (error) {</div>
<div class="code-line"><span class="line-number">1195</span>          console.log('❌ Token刷新失败:', error)</div>
<div class="code-line"><span class="line-number">1196</span>          http.isRefreshing = false // 重置刷新标记</div>
<div class="code-line"><span class="line-number">1197</span>          // 刷新失败，清除token并跳转到登录页</div>
<div class="code-line"><span class="line-number">1198</span>          http.clearTokens()</div>
<div class="code-line"><span class="line-number">1199</span>          uni.showToast({</div>
<div class="code-line"><span class="line-number">1200</span>            title: '登录已过期，请重新登录',</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1201</span>            icon: 'none'</div>
<div class="code-line"><span class="line-number">1202</span>          })</div>
<div class="code-line"><span class="line-number">1203</span>          </div>
<div class="code-line"><span class="line-number">1204</span>          setTimeout(() =&gt; {</div>
<div class="code-line"><span class="line-number">1205</span>            uni.reLaunch({</div>
<div class="code-line"><span class="line-number">1206</span>              url: '/pages/login/index'</div>
<div class="code-line"><span class="line-number">1207</span>            })</div>
<div class="code-line"><span class="line-number">1208</span>          }, 1500)</div>
<div class="code-line"><span class="line-number">1209</span>        }</div>
<div class="code-line"><span class="line-number">1210</span>      } else if (http.isRefreshing) {</div>
<div class="code-line"><span class="line-number">1211</span>        // 正在刷新token，返回特殊响应让前端等待</div>
<div class="code-line"><span class="line-number">1212</span>        console.log('🔄 Token正在刷新中，请稍后重试...')</div>
<div class="code-line"><span class="line-number">1213</span>        return {</div>
<div class="code-line"><span class="line-number">1214</span>          ...response,</div>
<div class="code-line"><span class="line-number">1215</span>          statusCode: 200,</div>
<div class="code-line"><span class="line-number">1216</span>          data: {</div>
<div class="code-line"><span class="line-number">1217</span>            code: 401,</div>
<div class="code-line"><span class="line-number">1218</span>            message: 'Token正在刷新中，请稍后重试',</div>
<div class="code-line"><span class="line-number">1219</span>            needRetry: false // 不需要重试，避免无限循环</div>
<div class="code-line"><span class="line-number">1220</span>          }</div>
<div class="code-line"><span class="line-number">1221</span>        }</div>
<div class="code-line"><span class="line-number">1222</span>      } else {</div>
<div class="code-line"><span class="line-number">1223</span>        // 没有刷新token，直接跳转到登录页</div>
<div class="code-line"><span class="line-number">1224</span>        http.clearTokens()</div>
<div class="code-line"><span class="line-number">1225</span>        uni.showToast({</div>
<div class="code-line"><span class="line-number">1226</span>          title: '请先登录',</div>
<div class="code-line"><span class="line-number">1227</span>          icon: 'none'</div>
<div class="code-line"><span class="line-number">1228</span>        })</div>
<div class="code-line"><span class="line-number">1229</span>        </div>
<div class="code-line"><span class="line-number">1230</span>        setTimeout(() =&gt; {</div>
<div class="code-line"><span class="line-number">1231</span>          uni.reLaunch({</div>
<div class="code-line"><span class="line-number">1232</span>            url: '/pages/login/index'</div>
<div class="code-line"><span class="line-number">1233</span>          })</div>
<div class="code-line"><span class="line-number">1234</span>        }, 1500)</div>
<div class="code-line"><span class="line-number">1235</span>      }</div>
<div class="code-line"><span class="line-number">1236</span>    } else {</div>
<div class="code-line"><span class="line-number">1237</span>      // 其他错误显示提示</div>
<div class="code-line"><span class="line-number">1238</span>      uni.showToast({</div>
<div class="code-line"><span class="line-number">1239</span>        title: http.getErrorMessage(response.statusCode),</div>
<div class="code-line"><span class="line-number">1240</span>        icon: 'none',</div>
<div class="code-line"><span class="line-number">1241</span>        duration: 1200</div>
<div class="code-line"><span class="line-number">1242</span>      })</div>
<div class="code-line"><span class="line-number">1243</span>    }</div>
<div class="code-line"><span class="line-number">1244</span>    </div>
<div class="code-line"><span class="line-number">1245</span>    return response</div>
<div class="code-line"><span class="line-number">1246</span>  }</div>
<div class="code-line"><span class="line-number">1247</span>)</div>
<div class="code-line"><span class="line-number">1248</span></div>
<div class="code-line"><span class="line-number">1249</span>// HTTP错误信息映射</div>
<div class="code-line"><span class="line-number">1250</span>function getHttpErrorMessage(statusCode) {</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1251</span>  const errorMessages = {</div>
<div class="code-line"><span class="line-number">1252</span>    400: '请求参数错误',</div>
<div class="code-line"><span class="line-number">1253</span>    401: '未授权访问',</div>
<div class="code-line"><span class="line-number">1254</span>    403: '禁止访问',</div>
<div class="code-line"><span class="line-number">1255</span>    404: '请求资源不存在',</div>
<div class="code-line"><span class="line-number">1256</span>    405: '请求方法不允许',</div>
<div class="code-line"><span class="line-number">1257</span>    408: '请求超时',</div>
<div class="code-line"><span class="line-number">1258</span>    500: '服务器内部错误',</div>
<div class="code-line"><span class="line-number">1259</span>    502: '网关错误',</div>
<div class="code-line"><span class="line-number">1260</span>    503: '服务暂不可用',</div>
<div class="code-line"><span class="line-number">1261</span>    504: '网关超时'</div>
<div class="code-line"><span class="line-number">1262</span>  }</div>
<div class="code-line"><span class="line-number">1263</span>  </div>
<div class="code-line"><span class="line-number">1264</span>  return errorMessages[statusCode] || `请求失败 (${statusCode})`</div>
<div class="code-line"><span class="line-number">1265</span>}</div>
<div class="code-line"><span class="line-number">1266</span></div>
<div class="code-line"><span class="line-number">1267</span>// Token过期处理</div>
<div class="code-line"><span class="line-number">1268</span>function handleTokenExpired() {</div>
<div class="code-line"><span class="line-number">1269</span>  // 清除本地存储的认证信息</div>
<div class="code-line"><span class="line-number">1270</span>  uni.removeStorageSync(CONFIG.STORAGE_KEYS.TOKEN)</div>
<div class="code-line"><span class="line-number">1271</span>  uni.removeStorageSync(CONFIG.STORAGE_KEYS.REFRESH_TOKEN)</div>
<div class="code-line"><span class="line-number">1272</span>  uni.removeStorageSync(CONFIG.STORAGE_KEYS.USER_INFO)</div>
<div class="code-line"><span class="line-number">1273</span>  </div>
<div class="code-line"><span class="line-number">1274</span>  // 跳转到登录页</div>
<div class="code-line"><span class="line-number">1275</span>  uni.showToast({</div>
<div class="code-line"><span class="line-number">1276</span>    title: '登录已过期，请重新登录',</div>
<div class="code-line"><span class="line-number">1277</span>    icon: 'none'</div>
<div class="code-line"><span class="line-number">1278</span>  })</div>
<div class="code-line"><span class="line-number">1279</span>  </div>
<div class="code-line"><span class="line-number">1280</span>  setTimeout(() =&gt; {</div>
<div class="code-line"><span class="line-number">1281</span>    // #ifdef MP-WEIXIN</div>
<div class="code-line"><span class="line-number">1282</span>    uni.reLaunch({</div>
<div class="code-line"><span class="line-number">1283</span>      url: '/pages/login/index'</div>
<div class="code-line"><span class="line-number">1284</span>    })</div>
<div class="code-line"><span class="line-number">1285</span>    // #endif</div>
<div class="code-line"><span class="line-number">1286</span>    </div>
<div class="code-line"><span class="line-number">1287</span>    // #ifdef APP-PLUS</div>
<div class="code-line"><span class="line-number">1288</span>    uni.reLaunch({</div>
<div class="code-line"><span class="line-number">1289</span>      url: '/pages/login/index'</div>
<div class="code-line"><span class="line-number">1290</span>    })</div>
<div class="code-line"><span class="line-number">1291</span>    // #endif</div>
<div class="code-line"><span class="line-number">1292</span>    </div>
<div class="code-line"><span class="line-number">1293</span>    // #ifdef H5</div>
<div class="code-line"><span class="line-number">1294</span>    uni.reLaunch({</div>
<div class="code-line"><span class="line-number">1295</span>      url: '/pages/login/index'</div>
<div class="code-line"><span class="line-number">1296</span>    })</div>
<div class="code-line"><span class="line-number">1297</span>    // #endif</div>
<div class="code-line"><span class="line-number">1298</span>  }, 1500)</div>
<div class="code-line"><span class="line-number">1299</span>}</div>
<div class="code-line"><span class="line-number">1300</span></div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1301</span>// 网络状态检查</div>
<div class="code-line"><span class="line-number">1302</span>export function checkNetworkStatus() {</div>
<div class="code-line"><span class="line-number">1303</span>  return new Promise((resolve) =&gt; {</div>
<div class="code-line"><span class="line-number">1304</span>    uni.getNetworkType({</div>
<div class="code-line"><span class="line-number">1305</span>      success: (res) =&gt; {</div>
<div class="code-line"><span class="line-number">1306</span>        resolve(res.networkType !== 'none')</div>
<div class="code-line"><span class="line-number">1307</span>      },</div>
<div class="code-line"><span class="line-number">1308</span>      fail: () =&gt; {</div>
<div class="code-line"><span class="line-number">1309</span>        resolve(false)</div>
<div class="code-line"><span class="line-number">1310</span>      }</div>
<div class="code-line"><span class="line-number">1311</span>    })</div>
<div class="code-line"><span class="line-number">1312</span>  })</div>
<div class="code-line"><span class="line-number">1313</span>}</div>
<div class="code-line"><span class="line-number">1314</span></div>
<div class="code-line"><span class="line-number">1315</span>// 平台适配的上传文件方法</div>
<div class="code-line"><span class="line-number">1316</span>export function uploadFile(options) {</div>
<div class="code-line"><span class="line-number">1317</span>  const { filePath, name = 'file', formData = {}, ...otherOptions } = options</div>
<div class="code-line"><span class="line-number">1318</span>  </div>
<div class="code-line"><span class="line-number">1319</span>  return new Promise((resolve, reject) =&gt; {</div>
<div class="code-line"><span class="line-number">1320</span>    // 检查网络状态</div>
<div class="code-line"><span class="line-number">1321</span>    checkNetworkStatus().then((isOnline) =&gt; {</div>
<div class="code-line"><span class="line-number">1322</span>      if (!isOnline) {</div>
<div class="code-line"><span class="line-number">1323</span>        uni.showToast({</div>
<div class="code-line"><span class="line-number">1324</span>          title: '网络不可用',</div>
<div class="code-line"><span class="line-number">1325</span>          icon: 'none'</div>
<div class="code-line"><span class="line-number">1326</span>        })</div>
<div class="code-line"><span class="line-number">1327</span>        reject(new Error('网络不可用'))</div>
<div class="code-line"><span class="line-number">1328</span>        return</div>
<div class="code-line"><span class="line-number">1329</span>      }</div>
<div class="code-line"><span class="line-number">1330</span>      </div>
<div class="code-line"><span class="line-number">1331</span>      const token = uni.getStorageSync(CONFIG.STORAGE_KEYS.TOKEN)</div>
<div class="code-line"><span class="line-number">1332</span>      const header = token ? { 'Authorization': `Bearer ${token}` } : {}</div>
<div class="code-line"><span class="line-number">1333</span>      </div>
<div class="code-line"><span class="line-number">1334</span>      uni.uploadFile({</div>
<div class="code-line"><span class="line-number">1335</span>        url: `${CONFIG.BASE_URL}${options.url}`,</div>
<div class="code-line"><span class="line-number">1336</span>        filePath,</div>
<div class="code-line"><span class="line-number">1337</span>        name,</div>
<div class="code-line"><span class="line-number">1338</span>        formData,</div>
<div class="code-line"><span class="line-number">1339</span>        header,</div>
<div class="code-line"><span class="line-number">1340</span>        ...otherOptions,</div>
<div class="code-line"><span class="line-number">1341</span>        success: (res) =&gt; {</div>
<div class="code-line"><span class="line-number">1342</span>          try {</div>
<div class="code-line"><span class="line-number">1343</span>            const data = JSON.parse(res.data)</div>
<div class="code-line"><span class="line-number">1344</span>            if (data.code === 200 || data.code === 0) {</div>
<div class="code-line"><span class="line-number">1345</span>              resolve(data)</div>
<div class="code-line"><span class="line-number">1346</span>            } else {</div>
<div class="code-line"><span class="line-number">1347</span>              reject(new Error(data.message || '上传失败'))</div>
<div class="code-line"><span class="line-number">1348</span>            }</div>
<div class="code-line"><span class="line-number">1349</span>          } catch (error) {</div>
<div class="code-line"><span class="line-number">1350</span>            reject(new Error('上传响应解析失败'))</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1351</span>          }</div>
<div class="code-line"><span class="line-number">1352</span>        },</div>
<div class="code-line"><span class="line-number">1353</span>        fail: (error) =&gt; {</div>
<div class="code-line"><span class="line-number">1354</span>          let errorMessage = '上传失败'</div>
<div class="code-line"><span class="line-number">1355</span>          </div>
<div class="code-line"><span class="line-number">1356</span>          // #ifdef MP-WEIXIN</div>
<div class="code-line"><span class="line-number">1357</span>          if (error.errMsg &amp;&amp; error.errMsg.includes('uploadFile:fail')) {</div>
<div class="code-line"><span class="line-number">1358</span>            errorMessage = '文件上传失败，请检查网络'</div>
<div class="code-line"><span class="line-number">1359</span>          }</div>
<div class="code-line"><span class="line-number">1360</span>          // #endif</div>
<div class="code-line"><span class="line-number">1361</span>          </div>
<div class="code-line"><span class="line-number">1362</span>          // #ifdef APP-PLUS</div>
<div class="code-line"><span class="line-number">1363</span>          if (error.errMsg &amp;&amp; error.errMsg.includes('timeout')) {</div>
<div class="code-line"><span class="line-number">1364</span>            errorMessage = '上传超时，请重试'</div>
<div class="code-line"><span class="line-number">1365</span>          }</div>
<div class="code-line"><span class="line-number">1366</span>          // #endif</div>
<div class="code-line"><span class="line-number">1367</span>          </div>
<div class="code-line"><span class="line-number">1368</span>          reject(new Error(errorMessage))</div>
<div class="code-line"><span class="line-number">1369</span>        }</div>
<div class="code-line"><span class="line-number">1370</span>      })</div>
<div class="code-line"><span class="line-number">1371</span>    })</div>
<div class="code-line"><span class="line-number">1372</span>  })</div>
<div class="code-line"><span class="line-number">1373</span>}</div>
<div class="code-line"><span class="line-number">1374</span></div>
<div class="code-line"><span class="line-number">1375</span>export default http </div>
<div class="file-header">文件: ./api/config.js</div>
<div class="code-line"><span class="line-number">1376</span>/**</div>
<div class="code-line"><span class="line-number">1377</span> * MVR设备租赁平台 - API配置文件</div>
<div class="code-line"><span class="line-number">1378</span> * 统一管理API相关配置</div>
<div class="code-line"><span class="line-number">1379</span> */</div>
<div class="code-line"><span class="line-number">1380</span></div>
<div class="code-line"><span class="line-number">1381</span>// API配置文件</div>
<div class="code-line"><span class="line-number">1382</span>export const API_CONFIG = {</div>
<div class="code-line"><span class="line-number">1383</span>  // 基础配置</div>
<div class="code-line"><span class="line-number">1384</span>  BASE_URL: 'https://api.ezubei.cn',</div>
<div class="code-line"><span class="line-number">1385</span>  TIMEOUT: 10000,</div>
<div class="code-line"><span class="line-number">1386</span>  </div>
<div class="code-line"><span class="line-number">1387</span>  // 响应状态码</div>
<div class="code-line"><span class="line-number">1388</span>  STATUS_CODES: {</div>
<div class="code-line"><span class="line-number">1389</span>    SUCCESS: 200,</div>
<div class="code-line"><span class="line-number">1390</span>    CREATED: 201,</div>
<div class="code-line"><span class="line-number">1391</span>    UNAUTHORIZED: 401,</div>
<div class="code-line"><span class="line-number">1392</span>    FORBIDDEN: 403,</div>
<div class="code-line"><span class="line-number">1393</span>    NOT_FOUND: 404,</div>
<div class="code-line"><span class="line-number">1394</span>    SERVER_ERROR: 500</div>
<div class="code-line"><span class="line-number">1395</span>  },</div>
<div class="code-line"><span class="line-number">1396</span>  </div>
<div class="code-line"><span class="line-number">1397</span>  // 存储键名</div>
<div class="code-line"><span class="line-number">1398</span>  STORAGE_KEYS: {</div>
<div class="code-line"><span class="line-number">1399</span>    TOKEN: 'access_token',</div>
<div class="code-line"><span class="line-number">1400</span>    REFRESH_TOKEN: 'refresh_token',</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1401</span>    USER_INFO: 'user_info'</div>
<div class="code-line"><span class="line-number">1402</span>  }</div>
<div class="code-line"><span class="line-number">1403</span>}</div>
<div class="code-line"><span class="line-number">1404</span></div>
<div class="code-line"><span class="line-number">1405</span>// 用户状态枚举</div>
<div class="code-line"><span class="line-number">1406</span>export const USER_STATUS = {</div>
<div class="code-line"><span class="line-number">1407</span>  ACTIVE: 'ACTIVE',</div>
<div class="code-line"><span class="line-number">1408</span>  INACTIVE: 'INACTIVE', </div>
<div class="code-line"><span class="line-number">1409</span>  BANNED: 'BANNED'</div>
<div class="code-line"><span class="line-number">1410</span>}</div>
<div class="code-line"><span class="line-number">1411</span></div>
<div class="code-line"><span class="line-number">1412</span>// 用户角色枚举</div>
<div class="code-line"><span class="line-number">1413</span>export const USER_ROLE = {</div>
<div class="code-line"><span class="line-number">1414</span>  USER: 'USER',</div>
<div class="code-line"><span class="line-number">1415</span>  SUPER_ADMIN: 'SUPER_ADMIN',</div>
<div class="code-line"><span class="line-number">1416</span>  OPERATION_ADMIN: 'OPERATION_ADMIN',</div>
<div class="code-line"><span class="line-number">1417</span>  SERVICE_ADMIN: 'SERVICE_ADMIN',</div>
<div class="code-line"><span class="line-number">1418</span>  FINANCE_ADMIN: 'FINANCE_ADMIN'</div>
<div class="code-line"><span class="line-number">1419</span>}</div>
<div class="code-line"><span class="line-number">1420</span></div>
<div class="code-line"><span class="line-number">1421</span>// 设备状态枚举</div>
<div class="code-line"><span class="line-number">1422</span>export const DEVICE_STATUS = {</div>
<div class="code-line"><span class="line-number">1423</span>  AVAILABLE: 'AVAILABLE',</div>
<div class="code-line"><span class="line-number">1424</span>  RENTED: 'RENTED',</div>
<div class="code-line"><span class="line-number">1425</span>  MAINTENANCE: 'MAINTENANCE',</div>
<div class="code-line"><span class="line-number">1426</span>  OFFLINE: 'OFFLINE'</div>
<div class="code-line"><span class="line-number">1427</span>}</div>
<div class="code-line"><span class="line-number">1428</span></div>
<div class="code-line"><span class="line-number">1429</span>// 订单状态枚举</div>
<div class="code-line"><span class="line-number">1430</span>export const ORDER_STATUS = {</div>
<div class="code-line"><span class="line-number">1431</span>  DRAFT: 'DRAFT',</div>
<div class="code-line"><span class="line-number">1432</span>  SUBMITTED: 'SUBMITTED',</div>
<div class="code-line"><span class="line-number">1433</span>  PAYMENT_PENDING: 'PAYMENT_PENDING',</div>
<div class="code-line"><span class="line-number">1434</span>  CONFIRMED: 'CONFIRMED',</div>
<div class="code-line"><span class="line-number">1435</span>  IN_DELIVERY: 'IN_DELIVERY',</div>
<div class="code-line"><span class="line-number">1436</span>  DELIVERED: 'DELIVERED',</div>
<div class="code-line"><span class="line-number">1437</span>  IN_USE: 'IN_USE',</div>
<div class="code-line"><span class="line-number">1438</span>  RETURNED: 'RETURNED',</div>
<div class="code-line"><span class="line-number">1439</span>  COMPLETED: 'COMPLETED',</div>
<div class="code-line"><span class="line-number">1440</span>  CANCELLED: 'CANCELLED'</div>
<div class="code-line"><span class="line-number">1441</span>}</div>
<div class="code-line"><span class="line-number">1442</span></div>
<div class="code-line"><span class="line-number">1443</span>// API端点</div>
<div class="code-line"><span class="line-number">1444</span>export const API_ENDPOINTS = {</div>
<div class="code-line"><span class="line-number">1445</span>  // 认证相关</div>
<div class="code-line"><span class="line-number">1446</span>  AUTH: {</div>
<div class="code-line"><span class="line-number">1447</span>    REGISTER: '/auth/register',</div>
<div class="code-line"><span class="line-number">1448</span>    LOGIN: '/auth/login',</div>
<div class="code-line"><span class="line-number">1449</span>    SMS_LOGIN: '/auth/sms-login',</div>
<div class="code-line"><span class="line-number">1450</span>    REFRESH: '/auth/refresh',</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1451</span>    LOGOUT: '/auth/logout'</div>
<div class="code-line"><span class="line-number">1452</span>  },</div>
<div class="code-line"><span class="line-number">1453</span></div>
<div class="code-line"><span class="line-number">1454</span>  // 短信相关</div>
<div class="code-line"><span class="line-number">1455</span>  	SMS: {</div>
<div class="code-line"><span class="line-number">1456</span>		SEND: '/sms/send',</div>
<div class="code-line"><span class="line-number">1457</span>		VERIFY: '/sms/verify',</div>
<div class="code-line"><span class="line-number">1458</span>		STATUS: '/sms/status'</div>
<div class="code-line"><span class="line-number">1459</span>	},</div>
<div class="code-line"><span class="line-number">1460</span>	</div>
<div class="code-line"><span class="line-number">1461</span>	BANNER: {</div>
<div class="code-line"><span class="line-number">1462</span>		ACTIVE: '/banners/active',</div>
<div class="code-line"><span class="line-number">1463</span>		LIST: '/banners'</div>
<div class="code-line"><span class="line-number">1464</span>	},</div>
<div class="code-line"><span class="line-number">1465</span>  </div>
<div class="code-line"><span class="line-number">1466</span>  // 用户相关</div>
<div class="code-line"><span class="line-number">1467</span>  USERS: {</div>
<div class="code-line"><span class="line-number">1468</span>    PROFILE: '/users/profile',</div>
<div class="code-line"><span class="line-number">1469</span>    UPDATE_PROFILE: '/users/profile',</div>
<div class="code-line"><span class="line-number">1470</span>    CHANGE_PASSWORD: '/users/change-password',</div>
<div class="code-line"><span class="line-number">1471</span>    SUBMIT_VERIFICATION: '/users/verification'</div>
<div class="code-line"><span class="line-number">1472</span>  },</div>
<div class="code-line"><span class="line-number">1473</span>  </div>
<div class="code-line"><span class="line-number">1474</span>  // 设备相关</div>
<div class="code-line"><span class="line-number">1475</span>  DEVICES: {</div>
<div class="code-line"><span class="line-number">1476</span>    LIST: '/devices',</div>
<div class="code-line"><span class="line-number">1477</span>    DETAIL: '/devices',</div>
<div class="code-line"><span class="line-number">1478</span>    CREATE: '/devices',</div>
<div class="code-line"><span class="line-number">1479</span>    UPDATE: '/devices',</div>
<div class="code-line"><span class="line-number">1480</span>    DELETE: '/devices',</div>
<div class="code-line"><span class="line-number">1481</span>    SEARCH: '/devices/search'</div>
<div class="code-line"><span class="line-number">1482</span>  },</div>
<div class="code-line"><span class="line-number">1483</span>  </div>
<div class="code-line"><span class="line-number">1484</span>  // 订单相关</div>
<div class="code-line"><span class="line-number">1485</span>  ORDERS: {</div>
<div class="code-line"><span class="line-number">1486</span>    LIST: '/orders',</div>
<div class="code-line"><span class="line-number">1487</span>    DETAIL: '/orders',</div>
<div class="code-line"><span class="line-number">1488</span>    CREATE: '/orders',</div>
<div class="code-line"><span class="line-number">1489</span>    UPDATE: '/orders',</div>
<div class="code-line"><span class="line-number">1490</span>    DELETE: '/orders',</div>
<div class="code-line"><span class="line-number">1491</span>    MY_ORDERS: '/orders/my',</div>
<div class="code-line"><span class="line-number">1492</span>    UPLOAD_REQUIREMENTS: '/orders/upload-requirements'</div>
<div class="code-line"><span class="line-number">1493</span>  },</div>
<div class="code-line"><span class="line-number">1494</span>  </div>
<div class="code-line"><span class="line-number">1495</span>  // 收藏相关</div>
<div class="code-line"><span class="line-number">1496</span>  FAVORITES: {</div>
<div class="code-line"><span class="line-number">1497</span>    LIST: '/favorites',</div>
<div class="code-line"><span class="line-number">1498</span>    ADD: '/favorites',</div>
<div class="code-line"><span class="line-number">1499</span>    REMOVE: '/favorites'</div>
<div class="code-line"><span class="line-number">1500</span>  }</div>
<div class="page-break"></div>
<div class="section-title">源程序后30页</div>
<div class="file-header">文件: ./pages/profile/about.vue</div>
<div class="code-line"><span class="line-number">   1</span>&lt;template&gt;</div>
<div class="code-line"><span class="line-number">   2</span>  &lt;view class="about-page"&gt;</div>
<div class="code-line"><span class="line-number">   3</span>    &lt;view class="about-container"&gt;</div>
<div class="code-line"><span class="line-number">   4</span>      &lt;!-- 公司Logo和名称 --&gt;</div>
<div class="code-line"><span class="line-number">   5</span>      &lt;view class="company-header"&gt;</div>
<div class="code-line"><span class="line-number">   6</span>        &lt;image src="/static/logo.png" class="company-logo" mode="aspectFit" /&gt;</div>
<div class="code-line"><span class="line-number">   7</span>        &lt;view class="company-name"&gt;E租贝&lt;/view&gt;</div>
<div class="code-line"><span class="line-number">   8</span>        &lt;view class="company-slogan"&gt;专业的环保设备租赁平台&lt;/view&gt;</div>
<div class="code-line"><span class="line-number">   9</span>      &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  10</span></div>
<div class="code-line"><span class="line-number">  11</span>      &lt;!-- 公司介绍 --&gt;</div>
<div class="code-line"><span class="line-number">  12</span>      &lt;view class="info-section"&gt;</div>
<div class="code-line"><span class="line-number">  13</span>        &lt;view class="section-title"&gt;公司简介&lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  14</span>        &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number">  15</span>          &lt;text class="content-text"&gt;</div>
<div class="code-line"><span class="line-number">  16</span>            苏州鼎昌节能环保科技有限公司是一家专注于环保设备租赁的创新型企业。我们致力于为客户提供高品质、高效率的环保设备租赁服务，助力企业实现绿色发展和可持续经营。</div>
<div class="code-line"><span class="line-number">  17</span>          &lt;/text&gt;</div>
<div class="code-line"><span class="line-number">  18</span>          &lt;text class="content-text"&gt;</div>
<div class="code-line"><span class="line-number">  19</span>            E租贝平台汇聚了各类先进的环保设备，包括MVR蒸发器、废水处理设备、废气处理设备等，为不同行业的客户提供定制化的环保解决方案。</div>
<div class="code-line"><span class="line-number">  20</span>          &lt;/text&gt;</div>
<div class="code-line"><span class="line-number">  21</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  22</span>      &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  23</span></div>
<div class="code-line"><span class="line-number">  24</span>      &lt;!-- 服务优势 --&gt;</div>
<div class="code-line"><span class="line-number">  25</span>      &lt;view class="info-section"&gt;</div>
<div class="code-line"><span class="line-number">  26</span>        &lt;view class="section-title"&gt;服务优势&lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  27</span>        &lt;view class="advantages"&gt;</div>
<div class="code-line"><span class="line-number">  28</span>          &lt;view class="advantage-item"&gt;</div>
<div class="code-line"><span class="line-number">  29</span>            &lt;view class="advantage-icon"&gt;</div>
<div class="code-line"><span class="line-number">  30</span>              &lt;u-icon name="shield-checkmark" size="24" color="#52c41a" /&gt;</div>
<div class="code-line"><span class="line-number">  31</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  32</span>            &lt;view class="advantage-content"&gt;</div>
<div class="code-line"><span class="line-number">  33</span>              &lt;text class="advantage-title"&gt;设备保障&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">  34</span>              &lt;text class="advantage-desc"&gt;所有设备均经过严格检测，确保性能稳定可靠&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">  35</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  36</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  37</span>          </div>
<div class="code-line"><span class="line-number">  38</span>          &lt;view class="advantage-item"&gt;</div>
<div class="code-line"><span class="line-number">  39</span>            &lt;view class="advantage-icon"&gt;</div>
<div class="code-line"><span class="line-number">  40</span>              &lt;u-icon name="clock" size="24" color="#1890ff" /&gt;</div>
<div class="code-line"><span class="line-number">  41</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  42</span>            &lt;view class="advantage-content"&gt;</div>
<div class="code-line"><span class="line-number">  43</span>              &lt;text class="advantage-title"&gt;快速响应&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">  44</span>              &lt;text class="advantage-desc"&gt;24小时内响应，48小时内完成设备交付&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">  45</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  46</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  47</span>          </div>
<div class="code-line"><span class="line-number">  48</span>          &lt;view class="advantage-item"&gt;</div>
<div class="code-line"><span class="line-number">  49</span>            &lt;view class="advantage-icon"&gt;</div>
<div class="code-line"><span class="line-number">  50</span>              &lt;u-icon name="account" size="24" color="#fa8c16" /&gt;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">  51</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  52</span>            &lt;view class="advantage-content"&gt;</div>
<div class="code-line"><span class="line-number">  53</span>              &lt;text class="advantage-title"&gt;专业服务&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">  54</span>              &lt;text class="advantage-desc"&gt;专业技术团队提供全程技术支持和维护服务&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">  55</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  56</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  57</span>          </div>
<div class="code-line"><span class="line-number">  58</span>          &lt;view class="advantage-item"&gt;</div>
<div class="code-line"><span class="line-number">  59</span>            &lt;view class="advantage-icon"&gt;</div>
<div class="code-line"><span class="line-number">  60</span>              &lt;u-icon name="heart" size="24" color="#f5222d" /&gt;</div>
<div class="code-line"><span class="line-number">  61</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  62</span>            &lt;view class="advantage-content"&gt;</div>
<div class="code-line"><span class="line-number">  63</span>              &lt;text class="advantage-title"&gt;贴心保障&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">  64</span>              &lt;text class="advantage-desc"&gt;完善的售后服务体系，让您租得放心用得安心&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">  65</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  66</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  67</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  68</span>      &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  69</span></div>
<div class="code-line"><span class="line-number">  70</span>      &lt;!-- 联系方式 --&gt;</div>
<div class="code-line"><span class="line-number">  71</span>      &lt;view class="info-section"&gt;</div>
<div class="code-line"><span class="line-number">  72</span>        &lt;view class="section-title"&gt;联系我们&lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  73</span>        &lt;view class="contact-info"&gt;</div>
<div class="code-line"><span class="line-number">  74</span>          &lt;view class="contact-item" @click="makePhoneCall"&gt;</div>
<div class="code-line"><span class="line-number">  75</span>            &lt;view class="contact-icon"&gt;</div>
<div class="code-line"><span class="line-number">  76</span>              &lt;u-icon name="phone" size="20" color="#52c41a" /&gt;</div>
<div class="code-line"><span class="line-number">  77</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  78</span>            &lt;view class="contact-content"&gt;</div>
<div class="code-line"><span class="line-number">  79</span>              &lt;text class="contact-label"&gt;客服电话&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">  80</span>              &lt;text class="contact-value"&gt;0512-6617 4176&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">  81</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  82</span>            &lt;u-icon name="arrow-right" size="14" color="#ccc" /&gt;</div>
<div class="code-line"><span class="line-number">  83</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  84</span>          </div>
<div class="code-line"><span class="line-number">  85</span>          &lt;view class="contact-item" @click="copyEmail"&gt;</div>
<div class="code-line"><span class="line-number">  86</span>            &lt;view class="contact-icon"&gt;</div>
<div class="code-line"><span class="line-number">  87</span>              &lt;u-icon name="email" size="20" color="#1890ff" /&gt;</div>
<div class="code-line"><span class="line-number">  88</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  89</span>            &lt;view class="contact-content"&gt;</div>
<div class="code-line"><span class="line-number">  90</span>              &lt;text class="contact-label"&gt;邮箱地址&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">  91</span>              &lt;text class="contact-value"&gt;cwy@suzdcjn.com&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">  92</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  93</span>            &lt;u-icon name="arrow-right" size="14" color="#ccc" /&gt;</div>
<div class="code-line"><span class="line-number">  94</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">  95</span>          </div>
<div class="code-line"><span class="line-number">  96</span>          &lt;view class="contact-item"&gt;</div>
<div class="code-line"><span class="line-number">  97</span>            &lt;view class="contact-icon"&gt;</div>
<div class="code-line"><span class="line-number">  98</span>              &lt;u-icon name="home" size="20" color="#722ed1" /&gt;</div>
<div class="code-line"><span class="line-number">  99</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 100</span>            &lt;view class="contact-content"&gt;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 101</span>              &lt;text class="contact-label"&gt;公司名称&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 102</span>              &lt;text class="contact-value"&gt;苏州鼎昌节能环保科技有限公司&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 103</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 104</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 105</span>          </div>
<div class="code-line"><span class="line-number"> 106</span>          &lt;view class="contact-item"&gt;</div>
<div class="code-line"><span class="line-number"> 107</span>            &lt;view class="contact-icon"&gt;</div>
<div class="code-line"><span class="line-number"> 108</span>              &lt;u-icon name="clock" size="20" color="#fa541c" /&gt;</div>
<div class="code-line"><span class="line-number"> 109</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 110</span>            &lt;view class="contact-content"&gt;</div>
<div class="code-line"><span class="line-number"> 111</span>              &lt;text class="contact-label"&gt;工作时间&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 112</span>              &lt;text class="contact-value"&gt;周一至周五 9:00-18:00&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 113</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 114</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 115</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 116</span>      &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 117</span></div>
<div class="code-line"><span class="line-number"> 118</span>      &lt;!-- 版本信息 --&gt;</div>
<div class="code-line"><span class="line-number"> 119</span>      &lt;view class="info-section"&gt;</div>
<div class="code-line"><span class="line-number"> 120</span>        &lt;view class="section-title"&gt;版本信息&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 121</span>        &lt;view class="version-info"&gt;</div>
<div class="code-line"><span class="line-number"> 122</span>          &lt;view class="version-item"&gt;</div>
<div class="code-line"><span class="line-number"> 123</span>            &lt;text class="version-label"&gt;当前版本&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 124</span>            &lt;text class="version-value"&gt;V1.0&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 125</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 126</span>          &lt;view class="version-item"&gt;</div>
<div class="code-line"><span class="line-number"> 127</span>            &lt;text class="version-label"&gt;更新时间&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 128</span>            &lt;text class="version-value"&gt;2025年7月&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 129</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 130</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 131</span>      &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 132</span></div>
<div class="code-line"><span class="line-number"> 133</span>      &lt;!-- 法律声明 --&gt;</div>
<div class="code-line"><span class="line-number"> 134</span>      &lt;view class="legal-section"&gt;</div>
<div class="code-line"><span class="line-number"> 135</span>        &lt;view class="legal-links"&gt;</div>
<div class="code-line"><span class="line-number"> 136</span>          &lt;text class="legal-link" @click="goToUserAgreement"&gt;用户协议&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 137</span>          &lt;text class="legal-divider"&gt;|&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 138</span>          &lt;text class="legal-link" @click="goToPrivacyPolicy"&gt;隐私政策&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 139</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 140</span>        &lt;view class="copyright"&gt;</div>
<div class="code-line"><span class="line-number"> 141</span>          &lt;text class="copyright-text"&gt;© 2025 苏州鼎昌节能环保科技有限公司&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 142</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 143</span>      &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 144</span>    &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 145</span>  &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 146</span>&lt;/template&gt;</div>
<div class="code-line"><span class="line-number"> 147</span></div>
<div class="code-line"><span class="line-number"> 148</span>&lt;script&gt;</div>
<div class="code-line"><span class="line-number"> 149</span>export default {</div>
<div class="code-line"><span class="line-number"> 150</span>  data() {</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 151</span>    return {}</div>
<div class="code-line"><span class="line-number"> 152</span>  },</div>
<div class="code-line"><span class="line-number"> 153</span>  </div>
<div class="code-line"><span class="line-number"> 154</span>  onLoad() {</div>
<div class="code-line"><span class="line-number"> 155</span>    uni.setNavigationBarTitle({</div>
<div class="code-line"><span class="line-number"> 156</span>      title: '关于我们'</div>
<div class="code-line"><span class="line-number"> 157</span>    })</div>
<div class="code-line"><span class="line-number"> 158</span>  },</div>
<div class="code-line"><span class="line-number"> 159</span>  </div>
<div class="code-line"><span class="line-number"> 160</span>  methods: {</div>
<div class="code-line"><span class="line-number"> 161</span>    makePhoneCall() {</div>
<div class="code-line"><span class="line-number"> 162</span>      uni.makePhoneCall({</div>
<div class="code-line"><span class="line-number"> 163</span>        phoneNumber: '0512-6617 4176'</div>
<div class="code-line"><span class="line-number"> 164</span>      })</div>
<div class="code-line"><span class="line-number"> 165</span>    },</div>
<div class="code-line"><span class="line-number"> 166</span>    </div>
<div class="code-line"><span class="line-number"> 167</span>    copyEmail() {</div>
<div class="code-line"><span class="line-number"> 168</span>      uni.setClipboardData({</div>
<div class="code-line"><span class="line-number"> 169</span>        data: 'cwy@suzdcjn.com',</div>
<div class="code-line"><span class="line-number"> 170</span>        success: () =&gt; {</div>
<div class="code-line"><span class="line-number"> 171</span>          uni.showToast({</div>
<div class="code-line"><span class="line-number"> 172</span>            title: '邮箱地址已复制',</div>
<div class="code-line"><span class="line-number"> 173</span>            icon: 'success'</div>
<div class="code-line"><span class="line-number"> 174</span>          })</div>
<div class="code-line"><span class="line-number"> 175</span>        }</div>
<div class="code-line"><span class="line-number"> 176</span>      })</div>
<div class="code-line"><span class="line-number"> 177</span>    },</div>
<div class="code-line"><span class="line-number"> 178</span>    </div>
<div class="code-line"><span class="line-number"> 179</span>    goToUserAgreement() {</div>
<div class="code-line"><span class="line-number"> 180</span>      uni.navigateTo({</div>
<div class="code-line"><span class="line-number"> 181</span>        url: '/pages/agreement/user'</div>
<div class="code-line"><span class="line-number"> 182</span>      })</div>
<div class="code-line"><span class="line-number"> 183</span>    },</div>
<div class="code-line"><span class="line-number"> 184</span>    </div>
<div class="code-line"><span class="line-number"> 185</span>    goToPrivacyPolicy() {</div>
<div class="code-line"><span class="line-number"> 186</span>      uni.navigateTo({</div>
<div class="code-line"><span class="line-number"> 187</span>        url: '/pages/agreement/privacy'</div>
<div class="code-line"><span class="line-number"> 188</span>      })</div>
<div class="code-line"><span class="line-number"> 189</span>    }</div>
<div class="code-line"><span class="line-number"> 190</span>  }</div>
<div class="code-line"><span class="line-number"> 191</span>}</div>
<div class="code-line"><span class="line-number"> 192</span>&lt;/script&gt;</div>
<div class="code-line"><span class="line-number"> 193</span></div>
<div class="code-line"><span class="line-number"> 194</span>&lt;style lang="scss" scoped&gt;</div>
<div class="code-line"><span class="line-number"> 195</span>.about-page {</div>
<div class="code-line"><span class="line-number"> 196</span>  min-height: 100vh;</div>
<div class="code-line"><span class="line-number"> 197</span>  background: #f5f5f5;</div>
<div class="code-line"><span class="line-number"> 198</span>}</div>
<div class="code-line"><span class="line-number"> 199</span></div>
<div class="code-line"><span class="line-number"> 200</span>.about-container {</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 201</span>  padding: 32rpx;</div>
<div class="code-line"><span class="line-number"> 202</span>}</div>
<div class="code-line"><span class="line-number"> 203</span></div>
<div class="code-line"><span class="line-number"> 204</span>.company-header {</div>
<div class="code-line"><span class="line-number"> 205</span>  background: white;</div>
<div class="code-line"><span class="line-number"> 206</span>  border-radius: 16rpx;</div>
<div class="code-line"><span class="line-number"> 207</span>  padding: 60rpx 40rpx;</div>
<div class="code-line"><span class="line-number"> 208</span>  text-align: center;</div>
<div class="code-line"><span class="line-number"> 209</span>  margin-bottom: 32rpx;</div>
<div class="code-line"><span class="line-number"> 210</span>}</div>
<div class="code-line"><span class="line-number"> 211</span></div>
<div class="code-line"><span class="line-number"> 212</span>.company-logo {</div>
<div class="code-line"><span class="line-number"> 213</span>  width: 120rpx;</div>
<div class="code-line"><span class="line-number"> 214</span>  height: 120rpx;</div>
<div class="code-line"><span class="line-number"> 215</span>  margin-bottom: 24rpx;</div>
<div class="code-line"><span class="line-number"> 216</span>}</div>
<div class="code-line"><span class="line-number"> 217</span></div>
<div class="code-line"><span class="line-number"> 218</span>.company-name {</div>
<div class="code-line"><span class="line-number"> 219</span>  font-size: 48rpx;</div>
<div class="code-line"><span class="line-number"> 220</span>  font-weight: 700;</div>
<div class="code-line"><span class="line-number"> 221</span>  color: #333;</div>
<div class="code-line"><span class="line-number"> 222</span>  margin-bottom: 16rpx;</div>
<div class="code-line"><span class="line-number"> 223</span>}</div>
<div class="code-line"><span class="line-number"> 224</span></div>
<div class="code-line"><span class="line-number"> 225</span>.company-slogan {</div>
<div class="code-line"><span class="line-number"> 226</span>  font-size: 28rpx;</div>
<div class="code-line"><span class="line-number"> 227</span>  color: #666;</div>
<div class="code-line"><span class="line-number"> 228</span>  line-height: 1.5;</div>
<div class="code-line"><span class="line-number"> 229</span>}</div>
<div class="code-line"><span class="line-number"> 230</span></div>
<div class="code-line"><span class="line-number"> 231</span>.info-section {</div>
<div class="code-line"><span class="line-number"> 232</span>  background: white;</div>
<div class="code-line"><span class="line-number"> 233</span>  border-radius: 16rpx;</div>
<div class="code-line"><span class="line-number"> 234</span>  margin-bottom: 32rpx;</div>
<div class="code-line"><span class="line-number"> 235</span>  overflow: hidden;</div>
<div class="code-line"><span class="line-number"> 236</span>}</div>
<div class="code-line"><span class="line-number"> 237</span></div>
<div class="code-line"><span class="line-number"> 238</span>.section-title {</div>
<div class="code-line"><span class="line-number"> 239</span>  padding: 32rpx 32rpx 0;</div>
<div class="code-line"><span class="line-number"> 240</span>  font-size: 36rpx;</div>
<div class="code-line"><span class="line-number"> 241</span>  font-weight: 600;</div>
<div class="code-line"><span class="line-number"> 242</span>  color: #333;</div>
<div class="code-line"><span class="line-number"> 243</span>  margin-bottom: 24rpx;</div>
<div class="code-line"><span class="line-number"> 244</span>}</div>
<div class="code-line"><span class="line-number"> 245</span></div>
<div class="code-line"><span class="line-number"> 246</span>.section-content {</div>
<div class="code-line"><span class="line-number"> 247</span>  padding: 0 32rpx 32rpx;</div>
<div class="code-line"><span class="line-number"> 248</span>}</div>
<div class="code-line"><span class="line-number"> 249</span></div>
<div class="code-line"><span class="line-number"> 250</span>.content-text {</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 251</span>  display: block;</div>
<div class="code-line"><span class="line-number"> 252</span>  font-size: 28rpx;</div>
<div class="code-line"><span class="line-number"> 253</span>  color: #666;</div>
<div class="code-line"><span class="line-number"> 254</span>  line-height: 1.6;</div>
<div class="code-line"><span class="line-number"> 255</span>  margin-bottom: 20rpx;</div>
<div class="code-line"><span class="line-number"> 256</span>  text-align: justify;</div>
<div class="code-line"><span class="line-number"> 257</span>  </div>
<div class="code-line"><span class="line-number"> 258</span>  &amp;:last-child {</div>
<div class="code-line"><span class="line-number"> 259</span>    margin-bottom: 0;</div>
<div class="code-line"><span class="line-number"> 260</span>  }</div>
<div class="code-line"><span class="line-number"> 261</span>}</div>
<div class="code-line"><span class="line-number"> 262</span></div>
<div class="code-line"><span class="line-number"> 263</span>.advantages {</div>
<div class="code-line"><span class="line-number"> 264</span>  padding: 0 32rpx 32rpx;</div>
<div class="code-line"><span class="line-number"> 265</span>}</div>
<div class="code-line"><span class="line-number"> 266</span></div>
<div class="code-line"><span class="line-number"> 267</span>.advantage-item {</div>
<div class="code-line"><span class="line-number"> 268</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 269</span>  align-items: flex-start;</div>
<div class="code-line"><span class="line-number"> 270</span>  gap: 20rpx;</div>
<div class="code-line"><span class="line-number"> 271</span>  margin-bottom: 32rpx;</div>
<div class="code-line"><span class="line-number"> 272</span>  </div>
<div class="code-line"><span class="line-number"> 273</span>  &amp;:last-child {</div>
<div class="code-line"><span class="line-number"> 274</span>    margin-bottom: 0;</div>
<div class="code-line"><span class="line-number"> 275</span>  }</div>
<div class="code-line"><span class="line-number"> 276</span>}</div>
<div class="code-line"><span class="line-number"> 277</span></div>
<div class="code-line"><span class="line-number"> 278</span>.advantage-icon {</div>
<div class="code-line"><span class="line-number"> 279</span>  width: 60rpx;</div>
<div class="code-line"><span class="line-number"> 280</span>  height: 60rpx;</div>
<div class="code-line"><span class="line-number"> 281</span>  background: #f0f7ff;</div>
<div class="code-line"><span class="line-number"> 282</span>  border-radius: 50%;</div>
<div class="code-line"><span class="line-number"> 283</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 284</span>  align-items: center;</div>
<div class="code-line"><span class="line-number"> 285</span>  justify-content: center;</div>
<div class="code-line"><span class="line-number"> 286</span>  flex-shrink: 0;</div>
<div class="code-line"><span class="line-number"> 287</span>}</div>
<div class="code-line"><span class="line-number"> 288</span></div>
<div class="code-line"><span class="line-number"> 289</span>.advantage-content {</div>
<div class="code-line"><span class="line-number"> 290</span>  flex: 1;</div>
<div class="code-line"><span class="line-number"> 291</span>}</div>
<div class="code-line"><span class="line-number"> 292</span></div>
<div class="code-line"><span class="line-number"> 293</span>.advantage-title {</div>
<div class="code-line"><span class="line-number"> 294</span>  display: block;</div>
<div class="code-line"><span class="line-number"> 295</span>  font-size: 32rpx;</div>
<div class="code-line"><span class="line-number"> 296</span>  font-weight: 600;</div>
<div class="code-line"><span class="line-number"> 297</span>  color: #333;</div>
<div class="code-line"><span class="line-number"> 298</span>  margin-bottom: 8rpx;</div>
<div class="code-line"><span class="line-number"> 299</span>}</div>
<div class="code-line"><span class="line-number"> 300</span></div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 301</span>.advantage-desc {</div>
<div class="code-line"><span class="line-number"> 302</span>  display: block;</div>
<div class="code-line"><span class="line-number"> 303</span>  font-size: 26rpx;</div>
<div class="code-line"><span class="line-number"> 304</span>  color: #666;</div>
<div class="code-line"><span class="line-number"> 305</span>  line-height: 1.5;</div>
<div class="code-line"><span class="line-number"> 306</span>}</div>
<div class="code-line"><span class="line-number"> 307</span></div>
<div class="code-line"><span class="line-number"> 308</span>.contact-info {</div>
<div class="code-line"><span class="line-number"> 309</span>  padding: 0 32rpx 32rpx;</div>
<div class="code-line"><span class="line-number"> 310</span>}</div>
<div class="code-line"><span class="line-number"> 311</span></div>
<div class="code-line"><span class="line-number"> 312</span>.contact-item {</div>
<div class="code-line"><span class="line-number"> 313</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 314</span>  align-items: center;</div>
<div class="code-line"><span class="line-number"> 315</span>  gap: 20rpx;</div>
<div class="code-line"><span class="line-number"> 316</span>  padding: 24rpx 0;</div>
<div class="code-line"><span class="line-number"> 317</span>  border-bottom: 1rpx solid #f0f0f0;</div>
<div class="code-line"><span class="line-number"> 318</span>  </div>
<div class="code-line"><span class="line-number"> 319</span>  &amp;:last-child {</div>
<div class="code-line"><span class="line-number"> 320</span>    border-bottom: none;</div>
<div class="code-line"><span class="line-number"> 321</span>  }</div>
<div class="code-line"><span class="line-number"> 322</span>}</div>
<div class="code-line"><span class="line-number"> 323</span></div>
<div class="code-line"><span class="line-number"> 324</span>.contact-icon {</div>
<div class="code-line"><span class="line-number"> 325</span>  width: 48rpx;</div>
<div class="code-line"><span class="line-number"> 326</span>  height: 48rpx;</div>
<div class="code-line"><span class="line-number"> 327</span>  background: #f0f7ff;</div>
<div class="code-line"><span class="line-number"> 328</span>  border-radius: 50%;</div>
<div class="code-line"><span class="line-number"> 329</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 330</span>  align-items: center;</div>
<div class="code-line"><span class="line-number"> 331</span>  justify-content: center;</div>
<div class="code-line"><span class="line-number"> 332</span>  flex-shrink: 0;</div>
<div class="code-line"><span class="line-number"> 333</span>}</div>
<div class="code-line"><span class="line-number"> 334</span></div>
<div class="code-line"><span class="line-number"> 335</span>.contact-content {</div>
<div class="code-line"><span class="line-number"> 336</span>  flex: 1;</div>
<div class="code-line"><span class="line-number"> 337</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 338</span>  flex-direction: column;</div>
<div class="code-line"><span class="line-number"> 339</span>  gap: 4rpx;</div>
<div class="code-line"><span class="line-number"> 340</span>}</div>
<div class="code-line"><span class="line-number"> 341</span></div>
<div class="code-line"><span class="line-number"> 342</span>.contact-label {</div>
<div class="code-line"><span class="line-number"> 343</span>  font-size: 24rpx;</div>
<div class="code-line"><span class="line-number"> 344</span>  color: #999;</div>
<div class="code-line"><span class="line-number"> 345</span>}</div>
<div class="code-line"><span class="line-number"> 346</span></div>
<div class="code-line"><span class="line-number"> 347</span>.contact-value {</div>
<div class="code-line"><span class="line-number"> 348</span>  font-size: 28rpx;</div>
<div class="code-line"><span class="line-number"> 349</span>  color: #333;</div>
<div class="code-line"><span class="line-number"> 350</span>  font-weight: 500;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 351</span>}</div>
<div class="code-line"><span class="line-number"> 352</span></div>
<div class="code-line"><span class="line-number"> 353</span>.version-info {</div>
<div class="code-line"><span class="line-number"> 354</span>  padding: 0 32rpx 32rpx;</div>
<div class="code-line"><span class="line-number"> 355</span>}</div>
<div class="code-line"><span class="line-number"> 356</span></div>
<div class="code-line"><span class="line-number"> 357</span>.version-item {</div>
<div class="code-line"><span class="line-number"> 358</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 359</span>  justify-content: space-between;</div>
<div class="code-line"><span class="line-number"> 360</span>  align-items: center;</div>
<div class="code-line"><span class="line-number"> 361</span>  padding: 16rpx 0;</div>
<div class="code-line"><span class="line-number"> 362</span>  border-bottom: 1rpx solid #f0f0f0;</div>
<div class="code-line"><span class="line-number"> 363</span>  </div>
<div class="code-line"><span class="line-number"> 364</span>  &amp;:last-child {</div>
<div class="code-line"><span class="line-number"> 365</span>    border-bottom: none;</div>
<div class="code-line"><span class="line-number"> 366</span>  }</div>
<div class="code-line"><span class="line-number"> 367</span>}</div>
<div class="code-line"><span class="line-number"> 368</span></div>
<div class="code-line"><span class="line-number"> 369</span>.version-label {</div>
<div class="code-line"><span class="line-number"> 370</span>  font-size: 28rpx;</div>
<div class="code-line"><span class="line-number"> 371</span>  color: #666;</div>
<div class="code-line"><span class="line-number"> 372</span>}</div>
<div class="code-line"><span class="line-number"> 373</span></div>
<div class="code-line"><span class="line-number"> 374</span>.version-value {</div>
<div class="code-line"><span class="line-number"> 375</span>  font-size: 28rpx;</div>
<div class="code-line"><span class="line-number"> 376</span>  color: #333;</div>
<div class="code-line"><span class="line-number"> 377</span>  font-weight: 500;</div>
<div class="code-line"><span class="line-number"> 378</span>}</div>
<div class="code-line"><span class="line-number"> 379</span></div>
<div class="code-line"><span class="line-number"> 380</span>.legal-section {</div>
<div class="code-line"><span class="line-number"> 381</span>  background: white;</div>
<div class="code-line"><span class="line-number"> 382</span>  border-radius: 16rpx;</div>
<div class="code-line"><span class="line-number"> 383</span>  padding: 40rpx;</div>
<div class="code-line"><span class="line-number"> 384</span>  text-align: center;</div>
<div class="code-line"><span class="line-number"> 385</span>}</div>
<div class="code-line"><span class="line-number"> 386</span></div>
<div class="code-line"><span class="line-number"> 387</span>.legal-links {</div>
<div class="code-line"><span class="line-number"> 388</span>  margin-bottom: 24rpx;</div>
<div class="code-line"><span class="line-number"> 389</span>}</div>
<div class="code-line"><span class="line-number"> 390</span></div>
<div class="code-line"><span class="line-number"> 391</span>.legal-link {</div>
<div class="code-line"><span class="line-number"> 392</span>  font-size: 26rpx;</div>
<div class="code-line"><span class="line-number"> 393</span>  color: #4A90E2;</div>
<div class="code-line"><span class="line-number"> 394</span>  text-decoration: underline;</div>
<div class="code-line"><span class="line-number"> 395</span>}</div>
<div class="code-line"><span class="line-number"> 396</span></div>
<div class="code-line"><span class="line-number"> 397</span>.legal-divider {</div>
<div class="code-line"><span class="line-number"> 398</span>  margin: 0 16rpx;</div>
<div class="code-line"><span class="line-number"> 399</span>  color: #ccc;</div>
<div class="code-line"><span class="line-number"> 400</span>}</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 401</span></div>
<div class="code-line"><span class="line-number"> 402</span>.copyright {</div>
<div class="code-line"><span class="line-number"> 403</span>  padding-top: 24rpx;</div>
<div class="code-line"><span class="line-number"> 404</span>  border-top: 1rpx solid #f0f0f0;</div>
<div class="code-line"><span class="line-number"> 405</span>}</div>
<div class="code-line"><span class="line-number"> 406</span></div>
<div class="code-line"><span class="line-number"> 407</span>.copyright-text {</div>
<div class="code-line"><span class="line-number"> 408</span>  font-size: 24rpx;</div>
<div class="code-line"><span class="line-number"> 409</span>  color: #999;</div>
<div class="code-line"><span class="line-number"> 410</span>}</div>
<div class="code-line"><span class="line-number"> 411</span>&lt;/style&gt;</div>
<div class="file-header">文件: ./pages/profile/feedback.vue</div>
<div class="code-line"><span class="line-number"> 412</span>&lt;template&gt;</div>
<div class="code-line"><span class="line-number"> 413</span>  &lt;view class="feedback-page"&gt;</div>
<div class="code-line"><span class="line-number"> 414</span>    &lt;view class="feedback-container"&gt;</div>
<div class="code-line"><span class="line-number"> 415</span>      &lt;view class="feedback-form"&gt;</div>
<div class="code-line"><span class="line-number"> 416</span>        &lt;view class="form-section"&gt;</div>
<div class="code-line"><span class="line-number"> 417</span>          &lt;view class="section-title"&gt;反馈类型&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 418</span>          &lt;view class="feedback-types"&gt;</div>
<div class="code-line"><span class="line-number"> 419</span>            &lt;view </div>
<div class="code-line"><span class="line-number"> 420</span>              v-for="type in feedbackTypes" </div>
<div class="code-line"><span class="line-number"> 421</span>              :key="type.value"</div>
<div class="code-line"><span class="line-number"> 422</span>              class="type-item"</div>
<div class="code-line"><span class="line-number"> 423</span>              :class="{ active: selectedType === type.value }"</div>
<div class="code-line"><span class="line-number"> 424</span>              @click="selectedType = type.value"</div>
<div class="code-line"><span class="line-number"> 425</span>            &gt;</div>
<div class="code-line"><span class="line-number"> 426</span>              &lt;u-icon :name="type.icon" size="16" :color="selectedType === type.value ? '#4A90E2' : '#999'" /&gt;</div>
<div class="code-line"><span class="line-number"> 427</span>              &lt;text class="type-text"&gt;{{ type.label }}&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 428</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 429</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 430</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 431</span></div>
<div class="code-line"><span class="line-number"> 432</span>        &lt;view class="form-section"&gt;</div>
<div class="code-line"><span class="line-number"> 433</span>          &lt;view class="section-title"&gt;详细描述&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 434</span>          &lt;textarea</div>
<div class="code-line"><span class="line-number"> 435</span>            v-model="feedbackContent"</div>
<div class="code-line"><span class="line-number"> 436</span>            class="feedback-textarea"</div>
<div class="code-line"><span class="line-number"> 437</span>            placeholder="请详细描述您遇到的问题或建议，我们会认真对待每一条反馈..."</div>
<div class="code-line"><span class="line-number"> 438</span>            maxlength="500"</div>
<div class="code-line"><span class="line-number"> 439</span>            :show-count="true"</div>
<div class="code-line"><span class="line-number"> 440</span>          /&gt;</div>
<div class="code-line"><span class="line-number"> 441</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 442</span></div>
<div class="code-line"><span class="line-number"> 443</span>        &lt;view class="form-section"&gt;</div>
<div class="code-line"><span class="line-number"> 444</span>          &lt;view class="section-title"&gt;联系方式（选填）&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 445</span>          &lt;input</div>
<div class="code-line"><span class="line-number"> 446</span>            v-model="contactInfo"</div>
<div class="code-line"><span class="line-number"> 447</span>            class="contact-input"</div>
<div class="code-line"><span class="line-number"> 448</span>            placeholder="请留下您的手机号或邮箱，方便我们与您联系"</div>
<div class="code-line"><span class="line-number"> 449</span>            maxlength="50"</div>
<div class="code-line"><span class="line-number"> 450</span>          /&gt;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 451</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 452</span></div>
<div class="code-line"><span class="line-number"> 453</span>        &lt;view class="form-section"&gt;</div>
<div class="code-line"><span class="line-number"> 454</span>          &lt;view class="section-title"&gt;上传图片（选填）&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 455</span>          &lt;view class="image-upload"&gt;</div>
<div class="code-line"><span class="line-number"> 456</span>            &lt;view </div>
<div class="code-line"><span class="line-number"> 457</span>              v-for="(image, index) in uploadedImages" </div>
<div class="code-line"><span class="line-number"> 458</span>              :key="index"</div>
<div class="code-line"><span class="line-number"> 459</span>              class="image-item"</div>
<div class="code-line"><span class="line-number"> 460</span>            &gt;</div>
<div class="code-line"><span class="line-number"> 461</span>              &lt;image :src="image" class="uploaded-image" mode="aspectFill" /&gt;</div>
<div class="code-line"><span class="line-number"> 462</span>              &lt;view class="image-delete" @click="removeImage(index)"&gt;</div>
<div class="code-line"><span class="line-number"> 463</span>                &lt;u-icon name="close" size="12" color="#fff" /&gt;</div>
<div class="code-line"><span class="line-number"> 464</span>              &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 465</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 466</span>            &lt;view </div>
<div class="code-line"><span class="line-number"> 467</span>              v-if="uploadedImages.length &lt; 3"</div>
<div class="code-line"><span class="line-number"> 468</span>              class="upload-btn"</div>
<div class="code-line"><span class="line-number"> 469</span>              @click="chooseImage"</div>
<div class="code-line"><span class="line-number"> 470</span>            &gt;</div>
<div class="code-line"><span class="line-number"> 471</span>              &lt;u-icon name="plus" size="20" color="#999" /&gt;</div>
<div class="code-line"><span class="line-number"> 472</span>              &lt;text class="upload-text"&gt;添加图片&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 473</span>            &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 474</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 475</span>          &lt;view class="upload-tip"&gt;最多上传3张图片，每张不超过5MB&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 476</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 477</span>      &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 478</span></div>
<div class="code-line"><span class="line-number"> 479</span>      &lt;view class="submit-section"&gt;</div>
<div class="code-line"><span class="line-number"> 480</span>        &lt;u-button </div>
<div class="code-line"><span class="line-number"> 481</span>          type="primary" </div>
<div class="code-line"><span class="line-number"> 482</span>          size="large" </div>
<div class="code-line"><span class="line-number"> 483</span>          :loading="submitting"</div>
<div class="code-line"><span class="line-number"> 484</span>          @click="submitFeedback"</div>
<div class="code-line"><span class="line-number"> 485</span>          :disabled="!canSubmit"</div>
<div class="code-line"><span class="line-number"> 486</span>        &gt;</div>
<div class="code-line"><span class="line-number"> 487</span>          提交反馈</div>
<div class="code-line"><span class="line-number"> 488</span>        &lt;/u-button&gt;</div>
<div class="code-line"><span class="line-number"> 489</span>      &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 490</span>    &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 491</span></div>
<div class="code-line"><span class="line-number"> 492</span>    &lt;!-- 提交成功弹窗 --&gt;</div>
<div class="code-line"><span class="line-number"> 493</span>    &lt;u-popup v-model="showSuccessModal" mode="center" border-radius="20"&gt;</div>
<div class="code-line"><span class="line-number"> 494</span>      &lt;view class="success-modal"&gt;</div>
<div class="code-line"><span class="line-number"> 495</span>        &lt;view class="success-icon"&gt;</div>
<div class="code-line"><span class="line-number"> 496</span>          &lt;u-icon name="checkmark-circle-fill" size="60" color="#52c41a" /&gt;</div>
<div class="code-line"><span class="line-number"> 497</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 498</span>        &lt;view class="success-title"&gt;反馈提交成功&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 499</span>        &lt;view class="success-content"&gt;</div>
<div class="code-line"><span class="line-number"> 500</span>          感谢您的反馈，我们会尽快处理并回复您。</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 501</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 502</span>        &lt;u-button type="primary" @click="goBack" size="large"&gt;</div>
<div class="code-line"><span class="line-number"> 503</span>          返回</div>
<div class="code-line"><span class="line-number"> 504</span>        &lt;/u-button&gt;</div>
<div class="code-line"><span class="line-number"> 505</span>      &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 506</span>    &lt;/u-popup&gt;</div>
<div class="code-line"><span class="line-number"> 507</span>  &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 508</span>&lt;/template&gt;</div>
<div class="code-line"><span class="line-number"> 509</span></div>
<div class="code-line"><span class="line-number"> 510</span>&lt;script&gt;</div>
<div class="code-line"><span class="line-number"> 511</span>import apiService from '@/api'</div>
<div class="code-line"><span class="line-number"> 512</span></div>
<div class="code-line"><span class="line-number"> 513</span>export default {</div>
<div class="code-line"><span class="line-number"> 514</span>  data() {</div>
<div class="code-line"><span class="line-number"> 515</span>    return {</div>
<div class="code-line"><span class="line-number"> 516</span>      selectedType: 'bug',</div>
<div class="code-line"><span class="line-number"> 517</span>      feedbackContent: '',</div>
<div class="code-line"><span class="line-number"> 518</span>      contactInfo: '',</div>
<div class="code-line"><span class="line-number"> 519</span>      uploadedImages: [],</div>
<div class="code-line"><span class="line-number"> 520</span>      submitting: false,</div>
<div class="code-line"><span class="line-number"> 521</span>      showSuccessModal: false,</div>
<div class="code-line"><span class="line-number"> 522</span>      </div>
<div class="code-line"><span class="line-number"> 523</span>      feedbackTypes: [</div>
<div class="code-line"><span class="line-number"> 524</span>        { value: 'bug', label: '功能异常', icon: 'error-circle' },</div>
<div class="code-line"><span class="line-number"> 525</span>        { value: 'suggestion', label: '功能建议', icon: 'star' },</div>
<div class="code-line"><span class="line-number"> 526</span>        { value: 'service', label: '服务问题', icon: 'question-circle' },</div>
<div class="code-line"><span class="line-number"> 527</span>        { value: 'other', label: '其他问题', icon: 'chat' }</div>
<div class="code-line"><span class="line-number"> 528</span>      ]</div>
<div class="code-line"><span class="line-number"> 529</span>    }</div>
<div class="code-line"><span class="line-number"> 530</span>  },</div>
<div class="code-line"><span class="line-number"> 531</span>  </div>
<div class="code-line"><span class="line-number"> 532</span>  computed: {</div>
<div class="code-line"><span class="line-number"> 533</span>    canSubmit() {</div>
<div class="code-line"><span class="line-number"> 534</span>      return this.feedbackContent.trim().length &gt;= 10</div>
<div class="code-line"><span class="line-number"> 535</span>    }</div>
<div class="code-line"><span class="line-number"> 536</span>  },</div>
<div class="code-line"><span class="line-number"> 537</span>  </div>
<div class="code-line"><span class="line-number"> 538</span>  onLoad() {</div>
<div class="code-line"><span class="line-number"> 539</span>    uni.setNavigationBarTitle({</div>
<div class="code-line"><span class="line-number"> 540</span>      title: '意见反馈'</div>
<div class="code-line"><span class="line-number"> 541</span>    })</div>
<div class="code-line"><span class="line-number"> 542</span>  },</div>
<div class="code-line"><span class="line-number"> 543</span>  </div>
<div class="code-line"><span class="line-number"> 544</span>  methods: {</div>
<div class="code-line"><span class="line-number"> 545</span>    chooseImage() {</div>
<div class="code-line"><span class="line-number"> 546</span>      uni.chooseImage({</div>
<div class="code-line"><span class="line-number"> 547</span>        count: 3 - this.uploadedImages.length,</div>
<div class="code-line"><span class="line-number"> 548</span>        sizeType: ['compressed'],</div>
<div class="code-line"><span class="line-number"> 549</span>        sourceType: ['album', 'camera'],</div>
<div class="code-line"><span class="line-number"> 550</span>        success: (res) =&gt; {</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 551</span>          this.uploadedImages.push(...res.tempFilePaths)</div>
<div class="code-line"><span class="line-number"> 552</span>        }</div>
<div class="code-line"><span class="line-number"> 553</span>      })</div>
<div class="code-line"><span class="line-number"> 554</span>    },</div>
<div class="code-line"><span class="line-number"> 555</span>    </div>
<div class="code-line"><span class="line-number"> 556</span>    removeImage(index) {</div>
<div class="code-line"><span class="line-number"> 557</span>      this.uploadedImages.splice(index, 1)</div>
<div class="code-line"><span class="line-number"> 558</span>    },</div>
<div class="code-line"><span class="line-number"> 559</span>    </div>
<div class="code-line"><span class="line-number"> 560</span>    async submitFeedback() {</div>
<div class="code-line"><span class="line-number"> 561</span>      if (!this.canSubmit) {</div>
<div class="code-line"><span class="line-number"> 562</span>        uni.showToast({</div>
<div class="code-line"><span class="line-number"> 563</span>          title: '请至少输入10个字符的反馈内容',</div>
<div class="code-line"><span class="line-number"> 564</span>          icon: 'none'</div>
<div class="code-line"><span class="line-number"> 565</span>        })</div>
<div class="code-line"><span class="line-number"> 566</span>        return</div>
<div class="code-line"><span class="line-number"> 567</span>      }</div>
<div class="code-line"><span class="line-number"> 568</span>      </div>
<div class="code-line"><span class="line-number"> 569</span>      try {</div>
<div class="code-line"><span class="line-number"> 570</span>        this.submitting = true</div>
<div class="code-line"><span class="line-number"> 571</span>        </div>
<div class="code-line"><span class="line-number"> 572</span>        // 模拟提交反馈</div>
<div class="code-line"><span class="line-number"> 573</span>        await new Promise(resolve =&gt; setTimeout(resolve, 1500))</div>
<div class="code-line"><span class="line-number"> 574</span>        </div>
<div class="code-line"><span class="line-number"> 575</span>        // 实际项目中这里应该调用API</div>
<div class="code-line"><span class="line-number"> 576</span>        // await apiService.feedback.submit({</div>
<div class="code-line"><span class="line-number"> 577</span>        //   type: this.selectedType,</div>
<div class="code-line"><span class="line-number"> 578</span>        //   content: this.feedbackContent,</div>
<div class="code-line"><span class="line-number"> 579</span>        //   contact: this.contactInfo,</div>
<div class="code-line"><span class="line-number"> 580</span>        //   images: this.uploadedImages</div>
<div class="code-line"><span class="line-number"> 581</span>        // })</div>
<div class="code-line"><span class="line-number"> 582</span>        </div>
<div class="code-line"><span class="line-number"> 583</span>        this.showSuccessModal = true</div>
<div class="code-line"><span class="line-number"> 584</span>        </div>
<div class="code-line"><span class="line-number"> 585</span>      } catch (error) {</div>
<div class="code-line"><span class="line-number"> 586</span>        console.error('提交反馈失败:', error)</div>
<div class="code-line"><span class="line-number"> 587</span>        uni.showToast({</div>
<div class="code-line"><span class="line-number"> 588</span>          title: error.message || '提交失败，请重试',</div>
<div class="code-line"><span class="line-number"> 589</span>          icon: 'none'</div>
<div class="code-line"><span class="line-number"> 590</span>        })</div>
<div class="code-line"><span class="line-number"> 591</span>      } finally {</div>
<div class="code-line"><span class="line-number"> 592</span>        this.submitting = false</div>
<div class="code-line"><span class="line-number"> 593</span>      }</div>
<div class="code-line"><span class="line-number"> 594</span>    },</div>
<div class="code-line"><span class="line-number"> 595</span>    </div>
<div class="code-line"><span class="line-number"> 596</span>    goBack() {</div>
<div class="code-line"><span class="line-number"> 597</span>      this.showSuccessModal = false</div>
<div class="code-line"><span class="line-number"> 598</span>      uni.navigateBack()</div>
<div class="code-line"><span class="line-number"> 599</span>    }</div>
<div class="code-line"><span class="line-number"> 600</span>  }</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 601</span>}</div>
<div class="code-line"><span class="line-number"> 602</span>&lt;/script&gt;</div>
<div class="code-line"><span class="line-number"> 603</span></div>
<div class="code-line"><span class="line-number"> 604</span>&lt;style lang="scss" scoped&gt;</div>
<div class="code-line"><span class="line-number"> 605</span>.feedback-page {</div>
<div class="code-line"><span class="line-number"> 606</span>  min-height: 100vh;</div>
<div class="code-line"><span class="line-number"> 607</span>  background: #f5f5f5;</div>
<div class="code-line"><span class="line-number"> 608</span>}</div>
<div class="code-line"><span class="line-number"> 609</span></div>
<div class="code-line"><span class="line-number"> 610</span>.feedback-container {</div>
<div class="code-line"><span class="line-number"> 611</span>  padding: 32rpx;</div>
<div class="code-line"><span class="line-number"> 612</span>}</div>
<div class="code-line"><span class="line-number"> 613</span></div>
<div class="code-line"><span class="line-number"> 614</span>.feedback-form {</div>
<div class="code-line"><span class="line-number"> 615</span>  background: white;</div>
<div class="code-line"><span class="line-number"> 616</span>  border-radius: 16rpx;</div>
<div class="code-line"><span class="line-number"> 617</span>  overflow: hidden;</div>
<div class="code-line"><span class="line-number"> 618</span>}</div>
<div class="code-line"><span class="line-number"> 619</span></div>
<div class="code-line"><span class="line-number"> 620</span>.form-section {</div>
<div class="code-line"><span class="line-number"> 621</span>  padding: 32rpx;</div>
<div class="code-line"><span class="line-number"> 622</span>  border-bottom: 1rpx solid #f0f0f0;</div>
<div class="code-line"><span class="line-number"> 623</span>  </div>
<div class="code-line"><span class="line-number"> 624</span>  &amp;:last-child {</div>
<div class="code-line"><span class="line-number"> 625</span>    border-bottom: none;</div>
<div class="code-line"><span class="line-number"> 626</span>  }</div>
<div class="code-line"><span class="line-number"> 627</span>}</div>
<div class="code-line"><span class="line-number"> 628</span></div>
<div class="code-line"><span class="line-number"> 629</span>.section-title {</div>
<div class="code-line"><span class="line-number"> 630</span>  font-size: 32rpx;</div>
<div class="code-line"><span class="line-number"> 631</span>  font-weight: 600;</div>
<div class="code-line"><span class="line-number"> 632</span>  color: #333;</div>
<div class="code-line"><span class="line-number"> 633</span>  margin-bottom: 24rpx;</div>
<div class="code-line"><span class="line-number"> 634</span>}</div>
<div class="code-line"><span class="line-number"> 635</span></div>
<div class="code-line"><span class="line-number"> 636</span>.feedback-types {</div>
<div class="code-line"><span class="line-number"> 637</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 638</span>  flex-wrap: wrap;</div>
<div class="code-line"><span class="line-number"> 639</span>  gap: 16rpx;</div>
<div class="code-line"><span class="line-number"> 640</span>}</div>
<div class="code-line"><span class="line-number"> 641</span></div>
<div class="code-line"><span class="line-number"> 642</span>.type-item {</div>
<div class="code-line"><span class="line-number"> 643</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 644</span>  align-items: center;</div>
<div class="code-line"><span class="line-number"> 645</span>  gap: 12rpx;</div>
<div class="code-line"><span class="line-number"> 646</span>  padding: 16rpx 24rpx;</div>
<div class="code-line"><span class="line-number"> 647</span>  border: 1rpx solid #e5e5e5;</div>
<div class="code-line"><span class="line-number"> 648</span>  border-radius: 8rpx;</div>
<div class="code-line"><span class="line-number"> 649</span>  background: #fafafa;</div>
<div class="code-line"><span class="line-number"> 650</span>  transition: all 0.3s;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 651</span>  </div>
<div class="code-line"><span class="line-number"> 652</span>  &amp;.active {</div>
<div class="code-line"><span class="line-number"> 653</span>    border-color: #4A90E2;</div>
<div class="code-line"><span class="line-number"> 654</span>    background: #f0f7ff;</div>
<div class="code-line"><span class="line-number"> 655</span>  }</div>
<div class="code-line"><span class="line-number"> 656</span>}</div>
<div class="code-line"><span class="line-number"> 657</span></div>
<div class="code-line"><span class="line-number"> 658</span>.type-text {</div>
<div class="code-line"><span class="line-number"> 659</span>  font-size: 28rpx;</div>
<div class="code-line"><span class="line-number"> 660</span>  color: #666;</div>
<div class="code-line"><span class="line-number"> 661</span>}</div>
<div class="code-line"><span class="line-number"> 662</span></div>
<div class="code-line"><span class="line-number"> 663</span>.feedback-textarea {</div>
<div class="code-line"><span class="line-number"> 664</span>  width: 100%;</div>
<div class="code-line"><span class="line-number"> 665</span>  min-height: 200rpx;</div>
<div class="code-line"><span class="line-number"> 666</span>  padding: 24rpx;</div>
<div class="code-line"><span class="line-number"> 667</span>  border: 1rpx solid #e5e5e5;</div>
<div class="code-line"><span class="line-number"> 668</span>  border-radius: 8rpx;</div>
<div class="code-line"><span class="line-number"> 669</span>  font-size: 28rpx;</div>
<div class="code-line"><span class="line-number"> 670</span>  line-height: 1.5;</div>
<div class="code-line"><span class="line-number"> 671</span>  background: #fafafa;</div>
<div class="code-line"><span class="line-number"> 672</span>}</div>
<div class="code-line"><span class="line-number"> 673</span></div>
<div class="code-line"><span class="line-number"> 674</span>.contact-input {</div>
<div class="code-line"><span class="line-number"> 675</span>  width: 100%;</div>
<div class="code-line"><span class="line-number"> 676</span>  height: 88rpx;</div>
<div class="code-line"><span class="line-number"> 677</span>  padding: 0 24rpx;</div>
<div class="code-line"><span class="line-number"> 678</span>  border: 1rpx solid #e5e5e5;</div>
<div class="code-line"><span class="line-number"> 679</span>  border-radius: 8rpx;</div>
<div class="code-line"><span class="line-number"> 680</span>  font-size: 28rpx;</div>
<div class="code-line"><span class="line-number"> 681</span>  background: #fafafa;</div>
<div class="code-line"><span class="line-number"> 682</span>}</div>
<div class="code-line"><span class="line-number"> 683</span></div>
<div class="code-line"><span class="line-number"> 684</span>.image-upload {</div>
<div class="code-line"><span class="line-number"> 685</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 686</span>  flex-wrap: wrap;</div>
<div class="code-line"><span class="line-number"> 687</span>  gap: 16rpx;</div>
<div class="code-line"><span class="line-number"> 688</span>}</div>
<div class="code-line"><span class="line-number"> 689</span></div>
<div class="code-line"><span class="line-number"> 690</span>.image-item {</div>
<div class="code-line"><span class="line-number"> 691</span>  position: relative;</div>
<div class="code-line"><span class="line-number"> 692</span>  width: 160rpx;</div>
<div class="code-line"><span class="line-number"> 693</span>  height: 160rpx;</div>
<div class="code-line"><span class="line-number"> 694</span>}</div>
<div class="code-line"><span class="line-number"> 695</span></div>
<div class="code-line"><span class="line-number"> 696</span>.uploaded-image {</div>
<div class="code-line"><span class="line-number"> 697</span>  width: 100%;</div>
<div class="code-line"><span class="line-number"> 698</span>  height: 100%;</div>
<div class="code-line"><span class="line-number"> 699</span>  border-radius: 8rpx;</div>
<div class="code-line"><span class="line-number"> 700</span>}</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 701</span></div>
<div class="code-line"><span class="line-number"> 702</span>.image-delete {</div>
<div class="code-line"><span class="line-number"> 703</span>  position: absolute;</div>
<div class="code-line"><span class="line-number"> 704</span>  top: -8rpx;</div>
<div class="code-line"><span class="line-number"> 705</span>  right: -8rpx;</div>
<div class="code-line"><span class="line-number"> 706</span>  width: 32rpx;</div>
<div class="code-line"><span class="line-number"> 707</span>  height: 32rpx;</div>
<div class="code-line"><span class="line-number"> 708</span>  background: #ff4d4f;</div>
<div class="code-line"><span class="line-number"> 709</span>  border-radius: 50%;</div>
<div class="code-line"><span class="line-number"> 710</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 711</span>  align-items: center;</div>
<div class="code-line"><span class="line-number"> 712</span>  justify-content: center;</div>
<div class="code-line"><span class="line-number"> 713</span>}</div>
<div class="code-line"><span class="line-number"> 714</span></div>
<div class="code-line"><span class="line-number"> 715</span>.upload-btn {</div>
<div class="code-line"><span class="line-number"> 716</span>  display: flex;</div>
<div class="code-line"><span class="line-number"> 717</span>  flex-direction: column;</div>
<div class="code-line"><span class="line-number"> 718</span>  align-items: center;</div>
<div class="code-line"><span class="line-number"> 719</span>  justify-content: center;</div>
<div class="code-line"><span class="line-number"> 720</span>  width: 160rpx;</div>
<div class="code-line"><span class="line-number"> 721</span>  height: 160rpx;</div>
<div class="code-line"><span class="line-number"> 722</span>  border: 1rpx dashed #d9d9d9;</div>
<div class="code-line"><span class="line-number"> 723</span>  border-radius: 8rpx;</div>
<div class="code-line"><span class="line-number"> 724</span>  background: #fafafa;</div>
<div class="code-line"><span class="line-number"> 725</span>  gap: 8rpx;</div>
<div class="code-line"><span class="line-number"> 726</span>}</div>
<div class="code-line"><span class="line-number"> 727</span></div>
<div class="code-line"><span class="line-number"> 728</span>.upload-text {</div>
<div class="code-line"><span class="line-number"> 729</span>  font-size: 24rpx;</div>
<div class="code-line"><span class="line-number"> 730</span>  color: #999;</div>
<div class="code-line"><span class="line-number"> 731</span>}</div>
<div class="code-line"><span class="line-number"> 732</span></div>
<div class="code-line"><span class="line-number"> 733</span>.upload-tip {</div>
<div class="code-line"><span class="line-number"> 734</span>  font-size: 24rpx;</div>
<div class="code-line"><span class="line-number"> 735</span>  color: #999;</div>
<div class="code-line"><span class="line-number"> 736</span>  margin-top: 16rpx;</div>
<div class="code-line"><span class="line-number"> 737</span>}</div>
<div class="code-line"><span class="line-number"> 738</span></div>
<div class="code-line"><span class="line-number"> 739</span>.submit-section {</div>
<div class="code-line"><span class="line-number"> 740</span>  margin-top: 32rpx;</div>
<div class="code-line"><span class="line-number"> 741</span>}</div>
<div class="code-line"><span class="line-number"> 742</span></div>
<div class="code-line"><span class="line-number"> 743</span>.success-modal {</div>
<div class="code-line"><span class="line-number"> 744</span>  width: 560rpx;</div>
<div class="code-line"><span class="line-number"> 745</span>  padding: 60rpx 40rpx;</div>
<div class="code-line"><span class="line-number"> 746</span>  text-align: center;</div>
<div class="code-line"><span class="line-number"> 747</span>}</div>
<div class="code-line"><span class="line-number"> 748</span></div>
<div class="code-line"><span class="line-number"> 749</span>.success-icon {</div>
<div class="code-line"><span class="line-number"> 750</span>  margin-bottom: 32rpx;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 751</span>}</div>
<div class="code-line"><span class="line-number"> 752</span></div>
<div class="code-line"><span class="line-number"> 753</span>.success-title {</div>
<div class="code-line"><span class="line-number"> 754</span>  font-size: 36rpx;</div>
<div class="code-line"><span class="line-number"> 755</span>  font-weight: 600;</div>
<div class="code-line"><span class="line-number"> 756</span>  color: #333;</div>
<div class="code-line"><span class="line-number"> 757</span>  margin-bottom: 16rpx;</div>
<div class="code-line"><span class="line-number"> 758</span>}</div>
<div class="code-line"><span class="line-number"> 759</span></div>
<div class="code-line"><span class="line-number"> 760</span>.success-content {</div>
<div class="code-line"><span class="line-number"> 761</span>  font-size: 28rpx;</div>
<div class="code-line"><span class="line-number"> 762</span>  color: #666;</div>
<div class="code-line"><span class="line-number"> 763</span>  line-height: 1.5;</div>
<div class="code-line"><span class="line-number"> 764</span>  margin-bottom: 40rpx;</div>
<div class="code-line"><span class="line-number"> 765</span>}</div>
<div class="code-line"><span class="line-number"> 766</span>&lt;/style&gt;</div>
<div class="file-header">文件: ./pages/agreement/user.vue</div>
<div class="code-line"><span class="line-number"> 767</span>&lt;template&gt;</div>
<div class="code-line"><span class="line-number"> 768</span>  &lt;view class="agreement-page"&gt;</div>
<div class="code-line"><span class="line-number"> 769</span>    </div>
<div class="code-line"><span class="line-number"> 770</span>    &lt;view class="content"&gt;</div>
<div class="code-line"><span class="line-number"> 771</span>      &lt;view class="agreement-content"&gt;</div>
<div class="code-line"><span class="line-number"> 772</span>        &lt;view class="title"&gt;E租贝用户协议&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 773</span>        </div>
<div class="code-line"><span class="line-number"> 774</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number"> 775</span>          &lt;view class="section-title"&gt;一、总则&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 776</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number"> 777</span>            &lt;text class="paragraph"&gt;欢迎使用E租贝（以下简称"平台"）。本协议是您与苏州鼎昌节能环保科技有限公司（以下简称"本公司"）之间关于使用平台服务所订立的协议。&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 778</span>            &lt;text class="paragraph"&gt;请您仔细阅读本协议，您点击"同意"或使用平台服务，即表示您已充分阅读、理解并接受本协议的全部内容。&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 779</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 780</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 781</span></div>
<div class="code-line"><span class="line-number"> 782</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number"> 783</span>          &lt;view class="section-title"&gt;二、服务内容&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 784</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number"> 785</span>            &lt;text class="paragraph"&gt;E租贝为用户提供专业的环保设备租赁服务，包括但不限于：&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 786</span>            &lt;text class="list-item"&gt;• 设备信息展示和搜索&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 787</span>            &lt;text class="list-item"&gt;• 设备租赁申请和管理&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 788</span>            &lt;text class="list-item"&gt;• 订单跟踪和状态管理&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 789</span>            &lt;text class="list-item"&gt;• 用户评价和反馈&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 790</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 791</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 792</span></div>
<div class="code-line"><span class="line-number"> 793</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number"> 794</span>          &lt;view class="section-title"&gt;三、用户权利和义务&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 795</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number"> 796</span>            &lt;text class="paragraph"&gt;用户权利：&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 797</span>            &lt;text class="list-item"&gt;• 享受平台提供的设备租赁服务&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 798</span>            &lt;text class="list-item"&gt;• 对设备和服务进行评价&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 799</span>            &lt;text class="list-item"&gt;• 申请退款和售后服务&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 800</span>            </div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 801</span>            &lt;text class="paragraph"&gt;用户义务：&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 802</span>            &lt;text class="list-item"&gt;• 提供真实、准确的个人信息&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 803</span>            &lt;text class="list-item"&gt;• 妥善使用和保管租赁设备&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 804</span>            &lt;text class="list-item"&gt;• 按时归还设备并支付费用&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 805</span>            &lt;text class="list-item"&gt;• 遵守相关法律法规&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 806</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 807</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 808</span></div>
<div class="code-line"><span class="line-number"> 809</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number"> 810</span>          &lt;view class="section-title"&gt;四、租赁规则&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 811</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number"> 812</span>            &lt;text class="paragraph"&gt;1. 租赁申请：用户需提供真实有效的身份信息和联系方式。&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 813</span>            &lt;text class="paragraph"&gt;2. 设备使用：用户应按照设备使用说明正确操作，不得恶意损坏设备。&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 814</span>            &lt;text class="paragraph"&gt;3. 归还要求：租赁期满后，用户应及时归还设备，确保设备完好无损。&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 815</span>            &lt;text class="paragraph"&gt;4. 费用支付：用户应按时支付租赁费用，逾期将产生滞纳金。&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 816</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 817</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 818</span></div>
<div class="code-line"><span class="line-number"> 819</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number"> 820</span>          &lt;view class="section-title"&gt;五、免责声明&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 821</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number"> 822</span>            &lt;text class="paragraph"&gt;1. 平台不对因不可抗力造成的服务中断承担责任。&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 823</span>            &lt;text class="paragraph"&gt;2. 用户因违反本协议造成的损失由用户自行承担。&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 824</span>            &lt;text class="paragraph"&gt;3. 平台保留随时修改本协议的权利，修改后的协议将在平台公示。&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 825</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 826</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 827</span></div>
<div class="code-line"><span class="line-number"> 828</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number"> 829</span>          &lt;view class="section-title"&gt;六、争议解决&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 830</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number"> 831</span>            &lt;text class="paragraph"&gt;因本协议产生的争议，双方应友好协商解决；协商不成的，可向平台所在地人民法院提起诉讼。&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 832</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 833</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 834</span></div>
<div class="code-line"><span class="line-number"> 835</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number"> 836</span>          &lt;view class="section-title"&gt;七、联系方式&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 837</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number"> 838</span>            &lt;text class="paragraph"&gt;如有疑问，请联系我们：&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 839</span>            &lt;text class="list-item"&gt;• 客服电话：0512-6617 4176&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 840</span>            &lt;text class="list-item"&gt;• 邮箱：cwy@suzdcjn.com&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 841</span>            &lt;text class="list-item"&gt;• 公司名称：苏州鼎昌节能环保科技有限公司&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 842</span>            &lt;text class="list-item"&gt;• 工作时间：周一至周五 9:00-18:00&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 843</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 844</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 845</span></div>
<div class="code-line"><span class="line-number"> 846</span>        &lt;view class="footer"&gt;</div>
<div class="code-line"><span class="line-number"> 847</span>          &lt;text class="update-time"&gt;最后更新时间：2025年7月&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 848</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 849</span>      &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 850</span>    &lt;/view&gt;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 851</span>  &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 852</span>&lt;/template&gt;</div>
<div class="code-line"><span class="line-number"> 853</span></div>
<div class="code-line"><span class="line-number"> 854</span>&lt;script&gt;</div>
<div class="code-line"><span class="line-number"> 855</span>export default {</div>
<div class="code-line"><span class="line-number"> 856</span>  data() {</div>
<div class="code-line"><span class="line-number"> 857</span>    return {}</div>
<div class="code-line"><span class="line-number"> 858</span>  },</div>
<div class="code-line"><span class="line-number"> 859</span>  </div>
<div class="code-line"><span class="line-number"> 860</span>  onLoad() {</div>
<div class="code-line"><span class="line-number"> 861</span>    // 设置页面标题</div>
<div class="code-line"><span class="line-number"> 862</span>    uni.setNavigationBarTitle({</div>
<div class="code-line"><span class="line-number"> 863</span>      title: '用户协议'</div>
<div class="code-line"><span class="line-number"> 864</span>    })</div>
<div class="code-line"><span class="line-number"> 865</span>  }</div>
<div class="code-line"><span class="line-number"> 866</span>}</div>
<div class="code-line"><span class="line-number"> 867</span>&lt;/script&gt;</div>
<div class="code-line"><span class="line-number"> 868</span></div>
<div class="code-line"><span class="line-number"> 869</span>&lt;style lang="scss" scoped&gt;</div>
<div class="code-line"><span class="line-number"> 870</span>.agreement-page {</div>
<div class="code-line"><span class="line-number"> 871</span>  min-height: 100vh;</div>
<div class="code-line"><span class="line-number"> 872</span>  background-color: #f5f5f5;</div>
<div class="code-line"><span class="line-number"> 873</span>}</div>
<div class="code-line"><span class="line-number"> 874</span></div>
<div class="code-line"><span class="line-number"> 875</span>.header {</div>
<div class="code-line"><span class="line-number"> 876</span>  position: sticky;</div>
<div class="code-line"><span class="line-number"> 877</span>  top: 0;</div>
<div class="code-line"><span class="line-number"> 878</span>  z-index: 100;</div>
<div class="code-line"><span class="line-number"> 879</span>}</div>
<div class="code-line"><span class="line-number"> 880</span></div>
<div class="code-line"><span class="line-number"> 881</span>.content {</div>
<div class="code-line"><span class="line-number"> 882</span>  padding: 32rpx;</div>
<div class="code-line"><span class="line-number"> 883</span>}</div>
<div class="code-line"><span class="line-number"> 884</span></div>
<div class="code-line"><span class="line-number"> 885</span>.agreement-content {</div>
<div class="code-line"><span class="line-number"> 886</span>  background: #fff;</div>
<div class="code-line"><span class="line-number"> 887</span>  border-radius: 16rpx;</div>
<div class="code-line"><span class="line-number"> 888</span>  padding: 40rpx;</div>
<div class="code-line"><span class="line-number"> 889</span>  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);</div>
<div class="code-line"><span class="line-number"> 890</span>}</div>
<div class="code-line"><span class="line-number"> 891</span></div>
<div class="code-line"><span class="line-number"> 892</span>.title {</div>
<div class="code-line"><span class="line-number"> 893</span>  font-size: $font-size-xl;</div>
<div class="code-line"><span class="line-number"> 894</span>  font-weight: $font-weight-bold;</div>
<div class="code-line"><span class="line-number"> 895</span>  color: $text-primary;</div>
<div class="code-line"><span class="line-number"> 896</span>  text-align: center;</div>
<div class="code-line"><span class="line-number"> 897</span>  margin-bottom: 48rpx;</div>
<div class="code-line"><span class="line-number"> 898</span>  line-height: 1.4;</div>
<div class="code-line"><span class="line-number"> 899</span>}</div>
<div class="code-line"><span class="line-number"> 900</span></div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 901</span>.section {</div>
<div class="code-line"><span class="line-number"> 902</span>  margin-bottom: 40rpx;</div>
<div class="code-line"><span class="line-number"> 903</span>}</div>
<div class="code-line"><span class="line-number"> 904</span></div>
<div class="code-line"><span class="line-number"> 905</span>.section-title {</div>
<div class="code-line"><span class="line-number"> 906</span>  font-size: $font-size-lg;</div>
<div class="code-line"><span class="line-number"> 907</span>  font-weight: $font-weight-bold;</div>
<div class="code-line"><span class="line-number"> 908</span>  color: $text-primary;</div>
<div class="code-line"><span class="line-number"> 909</span>  margin-bottom: 24rpx;</div>
<div class="code-line"><span class="line-number"> 910</span>  line-height: 1.4;</div>
<div class="code-line"><span class="line-number"> 911</span>}</div>
<div class="code-line"><span class="line-number"> 912</span></div>
<div class="code-line"><span class="line-number"> 913</span>.section-content {</div>
<div class="code-line"><span class="line-number"> 914</span>  .paragraph {</div>
<div class="code-line"><span class="line-number"> 915</span>    display: block;</div>
<div class="code-line"><span class="line-number"> 916</span>    font-size: $font-size-base;</div>
<div class="code-line"><span class="line-number"> 917</span>    color: $text-secondary;</div>
<div class="code-line"><span class="line-number"> 918</span>    line-height: 1.6;</div>
<div class="code-line"><span class="line-number"> 919</span>    margin-bottom: 16rpx;</div>
<div class="code-line"><span class="line-number"> 920</span>    text-align: justify;</div>
<div class="code-line"><span class="line-number"> 921</span>  }</div>
<div class="code-line"><span class="line-number"> 922</span>  </div>
<div class="code-line"><span class="line-number"> 923</span>  .list-item {</div>
<div class="code-line"><span class="line-number"> 924</span>    display: block;</div>
<div class="code-line"><span class="line-number"> 925</span>    font-size: $font-size-base;</div>
<div class="code-line"><span class="line-number"> 926</span>    color: $text-secondary;</div>
<div class="code-line"><span class="line-number"> 927</span>    line-height: 1.6;</div>
<div class="code-line"><span class="line-number"> 928</span>    margin-bottom: 12rpx;</div>
<div class="code-line"><span class="line-number"> 929</span>    padding-left: 20rpx;</div>
<div class="code-line"><span class="line-number"> 930</span>  }</div>
<div class="code-line"><span class="line-number"> 931</span>}</div>
<div class="code-line"><span class="line-number"> 932</span></div>
<div class="code-line"><span class="line-number"> 933</span>.footer {</div>
<div class="code-line"><span class="line-number"> 934</span>  margin-top: 60rpx;</div>
<div class="code-line"><span class="line-number"> 935</span>  padding-top: 32rpx;</div>
<div class="code-line"><span class="line-number"> 936</span>  border-top: 1rpx solid #e5e5e5;</div>
<div class="code-line"><span class="line-number"> 937</span>  text-align: center;</div>
<div class="code-line"><span class="line-number"> 938</span>}</div>
<div class="code-line"><span class="line-number"> 939</span></div>
<div class="code-line"><span class="line-number"> 940</span>.update-time {</div>
<div class="code-line"><span class="line-number"> 941</span>  font-size: $font-size-sm;</div>
<div class="code-line"><span class="line-number"> 942</span>  color: $text-tertiary;</div>
<div class="code-line"><span class="line-number"> 943</span>}</div>
<div class="code-line"><span class="line-number"> 944</span>&lt;/style&gt; </div>
<div class="file-header">文件: ./pages/agreement/privacy.vue</div>
<div class="code-line"><span class="line-number"> 945</span>&lt;template&gt;</div>
<div class="code-line"><span class="line-number"> 946</span>  &lt;view class="privacy-page"&gt;</div>
<div class="code-line"><span class="line-number"> 947</span>    </div>
<div class="code-line"><span class="line-number"> 948</span>    &lt;view class="content"&gt;</div>
<div class="code-line"><span class="line-number"> 949</span>      &lt;view class="privacy-content"&gt;</div>
<div class="code-line"><span class="line-number"> 950</span>        &lt;view class="title"&gt;E租贝隐私政策&lt;/view&gt;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number"> 951</span>        </div>
<div class="code-line"><span class="line-number"> 952</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number"> 953</span>          &lt;view class="section-title"&gt;一、信息收集&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 954</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number"> 955</span>            &lt;text class="paragraph"&gt;我们收集的信息包括：&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 956</span>            &lt;text class="list-item"&gt;• 注册信息：手机号、昵称、密码等&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 957</span>            &lt;text class="list-item"&gt;• 设备信息：设备使用记录、位置信息等&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 958</span>            &lt;text class="list-item"&gt;• 交易信息：租赁订单、支付记录等&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 959</span>            &lt;text class="list-item"&gt;• 设备信息：设备型号、使用状态、位置等&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 960</span>            &lt;text class="list-item"&gt;• 日志信息：访问时间、IP地址、设备标识等&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 961</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 962</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 963</span></div>
<div class="code-line"><span class="line-number"> 964</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number"> 965</span>          &lt;view class="section-title"&gt;二、信息使用&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 966</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number"> 967</span>            &lt;text class="paragraph"&gt;我们使用收集的信息用于：&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 968</span>            &lt;text class="list-item"&gt;• 提供和改进租赁服务&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 969</span>            &lt;text class="list-item"&gt;• 处理租赁申请和订单管理&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 970</span>            &lt;text class="list-item"&gt;• 发送服务通知和重要信息&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 971</span>            &lt;text class="list-item"&gt;• 提供客户支持和售后服务&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 972</span>            &lt;text class="list-item"&gt;• 进行安全防护和风险控制&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 973</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 974</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 975</span></div>
<div class="code-line"><span class="line-number"> 976</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number"> 977</span>          &lt;view class="section-title"&gt;三、信息共享&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 978</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number"> 979</span>            &lt;text class="paragraph"&gt;除以下情况外，我们不会与第三方共享您的个人信息：&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 980</span>            &lt;text class="list-item"&gt;• 获得您的明确同意&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 981</span>            &lt;text class="list-item"&gt;• 法律法规要求&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 982</span>            &lt;text class="list-item"&gt;• 保护用户和平台的安全&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 983</span>            &lt;text class="list-item"&gt;• 与授权合作伙伴共享必要信息&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 984</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 985</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 986</span></div>
<div class="code-line"><span class="line-number"> 987</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number"> 988</span>          &lt;view class="section-title"&gt;四、信息保护&lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 989</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number"> 990</span>            &lt;text class="paragraph"&gt;我们采取多种安全措施保护您的信息：&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 991</span>            &lt;text class="list-item"&gt;• 数据加密传输和存储&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 992</span>            &lt;text class="list-item"&gt;• 访问权限控制&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 993</span>            &lt;text class="list-item"&gt;• 安全审计和监控&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 994</span>            &lt;text class="list-item"&gt;• 定期安全评估&lt;/text&gt;</div>
<div class="code-line"><span class="line-number"> 995</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 996</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number"> 997</span></div>
<div class="code-line"><span class="line-number"> 998</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number"> 999</span>          &lt;view class="section-title"&gt;五、信息存储&lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1000</span>          &lt;view class="section-content"&gt;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1001</span>            &lt;text class="paragraph"&gt;1. 存储位置：您的信息存储在中国境内的服务器上。&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1002</span>            &lt;text class="paragraph"&gt;2. 存储期限：我们仅在必要期间保留您的信息。&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1003</span>            &lt;text class="paragraph"&gt;3. 信息删除：您有权要求删除您的个人信息。&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1004</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1005</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1006</span></div>
<div class="code-line"><span class="line-number">1007</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number">1008</span>          &lt;view class="section-title"&gt;六、您的权利&lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1009</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number">1010</span>            &lt;text class="paragraph"&gt;您对个人信息享有以下权利：&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1011</span>            &lt;text class="list-item"&gt;• 访问和查看个人信息&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1012</span>            &lt;text class="list-item"&gt;• 更正和更新个人信息&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1013</span>            &lt;text class="list-item"&gt;• 删除个人信息&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1014</span>            &lt;text class="list-item"&gt;• 撤回同意授权&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1015</span>            &lt;text class="list-item"&gt;• 投诉和举报&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1016</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1017</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1018</span></div>
<div class="code-line"><span class="line-number">1019</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number">1020</span>          &lt;view class="section-title"&gt;七、Cookie使用&lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1021</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number">1022</span>            &lt;text class="paragraph"&gt;我们使用Cookie和类似技术来：&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1023</span>            &lt;text class="list-item"&gt;• 记住您的登录状态&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1024</span>            &lt;text class="list-item"&gt;• 优化用户体验&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1025</span>            &lt;text class="list-item"&gt;• 分析服务使用情况&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1026</span>            &lt;text class="list-item"&gt;• 提供个性化服务&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1027</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1028</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1029</span></div>
<div class="code-line"><span class="line-number">1030</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number">1031</span>          &lt;view class="section-title"&gt;八、未成年人保护&lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1032</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number">1033</span>            &lt;text class="paragraph"&gt;我们重视未成年人个人信息保护：&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1034</span>            &lt;text class="list-item"&gt;• 不主动收集未成年人信息&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1035</span>            &lt;text class="list-item"&gt;• 发现未成年人信息时及时删除&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1036</span>            &lt;text class="list-item"&gt;• 监护人可代为行使相关权利&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1037</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1038</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1039</span></div>
<div class="code-line"><span class="line-number">1040</span>        &lt;view class="section"&gt;</div>
<div class="code-line"><span class="line-number">1041</span>          &lt;view class="section-title"&gt;九、政策更新&lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1042</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number">1043</span>            &lt;text class="paragraph"&gt;我们可能会更新本隐私政策：&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1044</span>            &lt;text class="list-item"&gt;• 更新内容将在平台公示&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1045</span>            &lt;text class="list-item"&gt;• 重大变更将另行通知&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1046</span>            &lt;text class="list-item"&gt;• 继续使用即表示同意更新&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1047</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1048</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1049</span></div>
<div class="code-line"><span class="line-number">1050</span>        &lt;view class="section"&gt;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1051</span>          &lt;view class="section-title"&gt;十、联系我们&lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1052</span>          &lt;view class="section-content"&gt;</div>
<div class="code-line"><span class="line-number">1053</span>            &lt;text class="paragraph"&gt;如您对本隐私政策有任何疑问，请联系我们：&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1054</span>            &lt;text class="list-item"&gt;• 邮箱：cwy@suzdcjn.com&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1055</span>            &lt;text class="list-item"&gt;• 电话：0512-6617 4176&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1056</span>            &lt;text class="list-item"&gt;• 公司名称：苏州鼎昌节能环保科技有限公司&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1057</span>          &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1058</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1059</span></div>
<div class="code-line"><span class="line-number">1060</span>        &lt;view class="footer"&gt;</div>
<div class="code-line"><span class="line-number">1061</span>          &lt;text class="update-time"&gt;最后更新时间：2025年7月&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1062</span>        &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1063</span>      &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1064</span>    &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1065</span>  &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1066</span>&lt;/template&gt;</div>
<div class="code-line"><span class="line-number">1067</span></div>
<div class="code-line"><span class="line-number">1068</span>&lt;script&gt;</div>
<div class="code-line"><span class="line-number">1069</span>export default {</div>
<div class="code-line"><span class="line-number">1070</span>  data() {</div>
<div class="code-line"><span class="line-number">1071</span>    return {}</div>
<div class="code-line"><span class="line-number">1072</span>  },</div>
<div class="code-line"><span class="line-number">1073</span>  </div>
<div class="code-line"><span class="line-number">1074</span>  onLoad() {</div>
<div class="code-line"><span class="line-number">1075</span>    // 设置页面标题</div>
<div class="code-line"><span class="line-number">1076</span>    uni.setNavigationBarTitle({</div>
<div class="code-line"><span class="line-number">1077</span>      title: '隐私政策'</div>
<div class="code-line"><span class="line-number">1078</span>    })</div>
<div class="code-line"><span class="line-number">1079</span>  }</div>
<div class="code-line"><span class="line-number">1080</span>}</div>
<div class="code-line"><span class="line-number">1081</span>&lt;/script&gt;</div>
<div class="code-line"><span class="line-number">1082</span></div>
<div class="code-line"><span class="line-number">1083</span>&lt;style lang="scss" scoped&gt;</div>
<div class="code-line"><span class="line-number">1084</span>.privacy-page {</div>
<div class="code-line"><span class="line-number">1085</span>  min-height: 100vh;</div>
<div class="code-line"><span class="line-number">1086</span>  background-color: #f5f5f5;</div>
<div class="code-line"><span class="line-number">1087</span>}</div>
<div class="code-line"><span class="line-number">1088</span></div>
<div class="code-line"><span class="line-number">1089</span>.header {</div>
<div class="code-line"><span class="line-number">1090</span>  position: sticky;</div>
<div class="code-line"><span class="line-number">1091</span>  top: 0;</div>
<div class="code-line"><span class="line-number">1092</span>  z-index: 100;</div>
<div class="code-line"><span class="line-number">1093</span>}</div>
<div class="code-line"><span class="line-number">1094</span></div>
<div class="code-line"><span class="line-number">1095</span>.content {</div>
<div class="code-line"><span class="line-number">1096</span>  padding: 32rpx;</div>
<div class="code-line"><span class="line-number">1097</span>}</div>
<div class="code-line"><span class="line-number">1098</span></div>
<div class="code-line"><span class="line-number">1099</span>.privacy-content {</div>
<div class="code-line"><span class="line-number">1100</span>  background: #fff;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1101</span>  border-radius: 16rpx;</div>
<div class="code-line"><span class="line-number">1102</span>  padding: 40rpx;</div>
<div class="code-line"><span class="line-number">1103</span>  box-shadow: 0 4rpx 12rpx rgba(0, 0, 0, 0.1);</div>
<div class="code-line"><span class="line-number">1104</span>}</div>
<div class="code-line"><span class="line-number">1105</span></div>
<div class="code-line"><span class="line-number">1106</span>.title {</div>
<div class="code-line"><span class="line-number">1107</span>  font-size: $font-size-xl;</div>
<div class="code-line"><span class="line-number">1108</span>  font-weight: $font-weight-bold;</div>
<div class="code-line"><span class="line-number">1109</span>  color: $text-primary;</div>
<div class="code-line"><span class="line-number">1110</span>  text-align: center;</div>
<div class="code-line"><span class="line-number">1111</span>  margin-bottom: 48rpx;</div>
<div class="code-line"><span class="line-number">1112</span>  line-height: 1.4;</div>
<div class="code-line"><span class="line-number">1113</span>}</div>
<div class="code-line"><span class="line-number">1114</span></div>
<div class="code-line"><span class="line-number">1115</span>.section {</div>
<div class="code-line"><span class="line-number">1116</span>  margin-bottom: 40rpx;</div>
<div class="code-line"><span class="line-number">1117</span>}</div>
<div class="code-line"><span class="line-number">1118</span></div>
<div class="code-line"><span class="line-number">1119</span>.section-title {</div>
<div class="code-line"><span class="line-number">1120</span>  font-size: $font-size-lg;</div>
<div class="code-line"><span class="line-number">1121</span>  font-weight: $font-weight-bold;</div>
<div class="code-line"><span class="line-number">1122</span>  color: $text-primary;</div>
<div class="code-line"><span class="line-number">1123</span>  margin-bottom: 24rpx;</div>
<div class="code-line"><span class="line-number">1124</span>  line-height: 1.4;</div>
<div class="code-line"><span class="line-number">1125</span>}</div>
<div class="code-line"><span class="line-number">1126</span></div>
<div class="code-line"><span class="line-number">1127</span>.section-content {</div>
<div class="code-line"><span class="line-number">1128</span>  .paragraph {</div>
<div class="code-line"><span class="line-number">1129</span>    display: block;</div>
<div class="code-line"><span class="line-number">1130</span>    font-size: $font-size-base;</div>
<div class="code-line"><span class="line-number">1131</span>    color: $text-secondary;</div>
<div class="code-line"><span class="line-number">1132</span>    line-height: 1.6;</div>
<div class="code-line"><span class="line-number">1133</span>    margin-bottom: 16rpx;</div>
<div class="code-line"><span class="line-number">1134</span>    text-align: justify;</div>
<div class="code-line"><span class="line-number">1135</span>  }</div>
<div class="code-line"><span class="line-number">1136</span>  </div>
<div class="code-line"><span class="line-number">1137</span>  .list-item {</div>
<div class="code-line"><span class="line-number">1138</span>    display: block;</div>
<div class="code-line"><span class="line-number">1139</span>    font-size: $font-size-base;</div>
<div class="code-line"><span class="line-number">1140</span>    color: $text-secondary;</div>
<div class="code-line"><span class="line-number">1141</span>    line-height: 1.6;</div>
<div class="code-line"><span class="line-number">1142</span>    margin-bottom: 12rpx;</div>
<div class="code-line"><span class="line-number">1143</span>    padding-left: 20rpx;</div>
<div class="code-line"><span class="line-number">1144</span>  }</div>
<div class="code-line"><span class="line-number">1145</span>}</div>
<div class="code-line"><span class="line-number">1146</span></div>
<div class="code-line"><span class="line-number">1147</span>.footer {</div>
<div class="code-line"><span class="line-number">1148</span>  margin-top: 60rpx;</div>
<div class="code-line"><span class="line-number">1149</span>  padding-top: 32rpx;</div>
<div class="code-line"><span class="line-number">1150</span>  border-top: 1rpx solid #e5e5e5;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1151</span>  text-align: center;</div>
<div class="code-line"><span class="line-number">1152</span>}</div>
<div class="code-line"><span class="line-number">1153</span></div>
<div class="code-line"><span class="line-number">1154</span>.update-time {</div>
<div class="code-line"><span class="line-number">1155</span>  font-size: $font-size-sm;</div>
<div class="code-line"><span class="line-number">1156</span>  color: $text-tertiary;</div>
<div class="code-line"><span class="line-number">1157</span>}</div>
<div class="code-line"><span class="line-number">1158</span>&lt;/style&gt; </div>
<div class="file-header">文件: ./components/OptimizedImage.vue</div>
<div class="code-line"><span class="line-number">1159</span>&lt;template&gt;</div>
<div class="code-line"><span class="line-number">1160</span>  &lt;view class="optimized-image" :style="containerStyle"&gt;</div>
<div class="code-line"><span class="line-number">1161</span>    &lt;image </div>
<div class="code-line"><span class="line-number">1162</span>      v-if="shouldLoad"</div>
<div class="code-line"><span class="line-number">1163</span>      :src="currentSrc"</div>
<div class="code-line"><span class="line-number">1164</span>      :mode="mode"</div>
<div class="code-line"><span class="line-number">1165</span>      :class="imageClass"</div>
<div class="code-line"><span class="line-number">1166</span>      :style="imageStyle"</div>
<div class="code-line"><span class="line-number">1167</span>      :show-menu-by-longpress="showMenuByLongpress"</div>
<div class="code-line"><span class="line-number">1168</span>      :lazy-load="lazyLoad"</div>
<div class="code-line"><span class="line-number">1169</span>      @load="onLoad"</div>
<div class="code-line"><span class="line-number">1170</span>      @error="onError"</div>
<div class="code-line"><span class="line-number">1171</span>      @click="onClick"</div>
<div class="code-line"><span class="line-number">1172</span>    /&gt;</div>
<div class="code-line"><span class="line-number">1173</span>    </div>
<div class="code-line"><span class="line-number">1174</span>    &lt;!-- 占位符 --&gt;</div>
<div class="code-line"><span class="line-number">1175</span>    &lt;view v-else-if="placeholder" class="placeholder" :style="containerStyle"&gt;</div>
<div class="code-line"><span class="line-number">1176</span>      &lt;image :src="placeholder" :mode="mode" class="placeholder-image" /&gt;</div>
<div class="code-line"><span class="line-number">1177</span>    &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1178</span>    </div>
<div class="code-line"><span class="line-number">1179</span>    &lt;!-- 加载状态 --&gt;</div>
<div class="code-line"><span class="line-number">1180</span>    &lt;view v-if="loading" class="loading-overlay"&gt;</div>
<div class="code-line"><span class="line-number">1181</span>      &lt;u-loading-icon mode="flower" /&gt;</div>
<div class="code-line"><span class="line-number">1182</span>    &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1183</span>    </div>
<div class="code-line"><span class="line-number">1184</span>    &lt;!-- 错误状态 --&gt;</div>
<div class="code-line"><span class="line-number">1185</span>    &lt;view v-if="error &amp;&amp; !loading" class="error-overlay" @click="retry"&gt;</div>
<div class="code-line"><span class="line-number">1186</span>      &lt;u-icon name="image" size="32" color="#ccc" /&gt;</div>
<div class="code-line"><span class="line-number">1187</span>      &lt;text class="error-text"&gt;加载失败，点击重试&lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1188</span>    &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1189</span>  &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1190</span>&lt;/template&gt;</div>
<div class="code-line"><span class="line-number">1191</span></div>
<div class="code-line"><span class="line-number">1192</span>&lt;script&gt;</div>
<div class="code-line"><span class="line-number">1193</span>export default {</div>
<div class="code-line"><span class="line-number">1194</span>  name: 'OptimizedImage',</div>
<div class="code-line"><span class="line-number">1195</span>  props: {</div>
<div class="code-line"><span class="line-number">1196</span>    // 图片地址</div>
<div class="code-line"><span class="line-number">1197</span>    src: {</div>
<div class="code-line"><span class="line-number">1198</span>      type: String,</div>
<div class="code-line"><span class="line-number">1199</span>      required: true</div>
<div class="code-line"><span class="line-number">1200</span>    },</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1201</span>    // 占位图</div>
<div class="code-line"><span class="line-number">1202</span>    placeholder: {</div>
<div class="code-line"><span class="line-number">1203</span>      type: String,</div>
<div class="code-line"><span class="line-number">1204</span>      default: '/static/placeholder-device.png'</div>
<div class="code-line"><span class="line-number">1205</span>    },</div>
<div class="code-line"><span class="line-number">1206</span>    // 错误占位图</div>
<div class="code-line"><span class="line-number">1207</span>    errorImage: {</div>
<div class="code-line"><span class="line-number">1208</span>      type: String,</div>
<div class="code-line"><span class="line-number">1209</span>      default: '/static/placeholder-device.png'</div>
<div class="code-line"><span class="line-number">1210</span>    },</div>
<div class="code-line"><span class="line-number">1211</span>    // 图片模式</div>
<div class="code-line"><span class="line-number">1212</span>    mode: {</div>
<div class="code-line"><span class="line-number">1213</span>      type: String,</div>
<div class="code-line"><span class="line-number">1214</span>      default: 'aspectFill'</div>
<div class="code-line"><span class="line-number">1215</span>    },</div>
<div class="code-line"><span class="line-number">1216</span>    // 宽度</div>
<div class="code-line"><span class="line-number">1217</span>    width: {</div>
<div class="code-line"><span class="line-number">1218</span>      type: [String, Number],</div>
<div class="code-line"><span class="line-number">1219</span>      default: '100%'</div>
<div class="code-line"><span class="line-number">1220</span>    },</div>
<div class="code-line"><span class="line-number">1221</span>    // 高度</div>
<div class="code-line"><span class="line-number">1222</span>    height: {</div>
<div class="code-line"><span class="line-number">1223</span>      type: [String, Number],</div>
<div class="code-line"><span class="line-number">1224</span>      default: 'auto'</div>
<div class="code-line"><span class="line-number">1225</span>    },</div>
<div class="code-line"><span class="line-number">1226</span>    // 圆角</div>
<div class="code-line"><span class="line-number">1227</span>    borderRadius: {</div>
<div class="code-line"><span class="line-number">1228</span>      type: [String, Number],</div>
<div class="code-line"><span class="line-number">1229</span>      default: 0</div>
<div class="code-line"><span class="line-number">1230</span>    },</div>
<div class="code-line"><span class="line-number">1231</span>    // 是否懒加载</div>
<div class="code-line"><span class="line-number">1232</span>    lazyLoad: {</div>
<div class="code-line"><span class="line-number">1233</span>      type: Boolean,</div>
<div class="code-line"><span class="line-number">1234</span>      default: true</div>
<div class="code-line"><span class="line-number">1235</span>    },</div>
<div class="code-line"><span class="line-number">1236</span>    // 是否启用长按菜单</div>
<div class="code-line"><span class="line-number">1237</span>    showMenuByLongpress: {</div>
<div class="code-line"><span class="line-number">1238</span>      type: Boolean,</div>
<div class="code-line"><span class="line-number">1239</span>      default: false</div>
<div class="code-line"><span class="line-number">1240</span>    },</div>
<div class="code-line"><span class="line-number">1241</span>    // 压缩质量 (0-100)</div>
<div class="code-line"><span class="line-number">1242</span>    quality: {</div>
<div class="code-line"><span class="line-number">1243</span>      type: Number,</div>
<div class="code-line"><span class="line-number">1244</span>      default: 80</div>
<div class="code-line"><span class="line-number">1245</span>    },</div>
<div class="code-line"><span class="line-number">1246</span>    // 是否立即加载</div>
<div class="code-line"><span class="line-number">1247</span>    immediate: {</div>
<div class="code-line"><span class="line-number">1248</span>      type: Boolean,</div>
<div class="code-line"><span class="line-number">1249</span>      default: false</div>
<div class="code-line"><span class="line-number">1250</span>    }</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1251</span>  },</div>
<div class="code-line"><span class="line-number">1252</span>  </div>
<div class="code-line"><span class="line-number">1253</span>  data() {</div>
<div class="code-line"><span class="line-number">1254</span>    return {</div>
<div class="code-line"><span class="line-number">1255</span>      loading: false,</div>
<div class="code-line"><span class="line-number">1256</span>      error: false,</div>
<div class="code-line"><span class="line-number">1257</span>      shouldLoad: false,</div>
<div class="code-line"><span class="line-number">1258</span>      currentSrc: '',</div>
<div class="code-line"><span class="line-number">1259</span>      retryCount: 0,</div>
<div class="code-line"><span class="line-number">1260</span>      maxRetry: 3</div>
<div class="code-line"><span class="line-number">1261</span>    }</div>
<div class="code-line"><span class="line-number">1262</span>  },</div>
<div class="code-line"><span class="line-number">1263</span>  </div>
<div class="code-line"><span class="line-number">1264</span>  computed: {</div>
<div class="code-line"><span class="line-number">1265</span>    containerStyle() {</div>
<div class="code-line"><span class="line-number">1266</span>      return {</div>
<div class="code-line"><span class="line-number">1267</span>        width: typeof this.width === 'number' ? this.width + 'rpx' : this.width,</div>
<div class="code-line"><span class="line-number">1268</span>        height: typeof this.height === 'number' ? this.height + 'rpx' : this.height,</div>
<div class="code-line"><span class="line-number">1269</span>        borderRadius: typeof this.borderRadius === 'number' ? this.borderRadius + 'rpx' : this.borderRadius,</div>
<div class="code-line"><span class="line-number">1270</span>        position: 'relative',</div>
<div class="code-line"><span class="line-number">1271</span>        overflow: 'hidden',</div>
<div class="code-line"><span class="line-number">1272</span>        backgroundColor: '#f5f5f5'</div>
<div class="code-line"><span class="line-number">1273</span>      }</div>
<div class="code-line"><span class="line-number">1274</span>    },</div>
<div class="code-line"><span class="line-number">1275</span>    </div>
<div class="code-line"><span class="line-number">1276</span>    imageClass() {</div>
<div class="code-line"><span class="line-number">1277</span>      return {</div>
<div class="code-line"><span class="line-number">1278</span>        'optimized-image-main': true,</div>
<div class="code-line"><span class="line-number">1279</span>        'loading': this.loading</div>
<div class="code-line"><span class="line-number">1280</span>      }</div>
<div class="code-line"><span class="line-number">1281</span>    },</div>
<div class="code-line"><span class="line-number">1282</span>    </div>
<div class="code-line"><span class="line-number">1283</span>    imageStyle() {</div>
<div class="code-line"><span class="line-number">1284</span>      return {</div>
<div class="code-line"><span class="line-number">1285</span>        width: '100%',</div>
<div class="code-line"><span class="line-number">1286</span>        height: '100%',</div>
<div class="code-line"><span class="line-number">1287</span>        borderRadius: typeof this.borderRadius === 'number' ? this.borderRadius + 'rpx' : this.borderRadius</div>
<div class="code-line"><span class="line-number">1288</span>      }</div>
<div class="code-line"><span class="line-number">1289</span>    }</div>
<div class="code-line"><span class="line-number">1290</span>  },</div>
<div class="code-line"><span class="line-number">1291</span>  </div>
<div class="code-line"><span class="line-number">1292</span>  watch: {</div>
<div class="code-line"><span class="line-number">1293</span>    src: {</div>
<div class="code-line"><span class="line-number">1294</span>      handler(newSrc) {</div>
<div class="code-line"><span class="line-number">1295</span>        if (newSrc) {</div>
<div class="code-line"><span class="line-number">1296</span>          this.initImage()</div>
<div class="code-line"><span class="line-number">1297</span>        }</div>
<div class="code-line"><span class="line-number">1298</span>      },</div>
<div class="code-line"><span class="line-number">1299</span>      immediate: true</div>
<div class="code-line"><span class="line-number">1300</span>    }</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1301</span>  },</div>
<div class="code-line"><span class="line-number">1302</span>  </div>
<div class="code-line"><span class="line-number">1303</span>  methods: {</div>
<div class="code-line"><span class="line-number">1304</span>    initImage() {</div>
<div class="code-line"><span class="line-number">1305</span>      if (this.immediate) {</div>
<div class="code-line"><span class="line-number">1306</span>        this.loadImage()</div>
<div class="code-line"><span class="line-number">1307</span>      } else {</div>
<div class="code-line"><span class="line-number">1308</span>        // 延迟加载，可以配合IntersectionObserver使用</div>
<div class="code-line"><span class="line-number">1309</span>        this.shouldLoad = true</div>
<div class="code-line"><span class="line-number">1310</span>        this.loadImage()</div>
<div class="code-line"><span class="line-number">1311</span>      }</div>
<div class="code-line"><span class="line-number">1312</span>    },</div>
<div class="code-line"><span class="line-number">1313</span>    </div>
<div class="code-line"><span class="line-number">1314</span>    loadImage() {</div>
<div class="code-line"><span class="line-number">1315</span>      if (!this.src) return</div>
<div class="code-line"><span class="line-number">1316</span>      </div>
<div class="code-line"><span class="line-number">1317</span>      this.loading = true</div>
<div class="code-line"><span class="line-number">1318</span>      this.error = false</div>
<div class="code-line"><span class="line-number">1319</span>      </div>
<div class="code-line"><span class="line-number">1320</span>      // 处理图片压缩</div>
<div class="code-line"><span class="line-number">1321</span>      this.currentSrc = this.getOptimizedImageUrl(this.src)</div>
<div class="code-line"><span class="line-number">1322</span>      this.shouldLoad = true</div>
<div class="code-line"><span class="line-number">1323</span>    },</div>
<div class="code-line"><span class="line-number">1324</span>    </div>
<div class="code-line"><span class="line-number">1325</span>    getOptimizedImageUrl(url) {</div>
<div class="code-line"><span class="line-number">1326</span>      // 如果是本地图片或已经优化过的URL，直接返回</div>
<div class="code-line"><span class="line-number">1327</span>      if (!url || url.startsWith('/static/') || url.startsWith('data:') || url.includes('imageView2')) {</div>
<div class="code-line"><span class="line-number">1328</span>        return url</div>
<div class="code-line"><span class="line-number">1329</span>      }</div>
<div class="code-line"><span class="line-number">1330</span>      </div>
<div class="code-line"><span class="line-number">1331</span>      // 七牛云图片压缩参数</div>
<div class="code-line"><span class="line-number">1332</span>      if (url.includes('qiniu.com') || url.includes('clouddn.com')) {</div>
<div class="code-line"><span class="line-number">1333</span>        return `${url}?imageView2/2/w/800/h/800/q/${this.quality}`</div>
<div class="code-line"><span class="line-number">1334</span>      }</div>
<div class="code-line"><span class="line-number">1335</span>      </div>
<div class="code-line"><span class="line-number">1336</span>      // 阿里云OSS图片压缩</div>
<div class="code-line"><span class="line-number">1337</span>      if (url.includes('aliyuncs.com')) {</div>
<div class="code-line"><span class="line-number">1338</span>        return `${url}?x-oss-process=image/resize,w_800,h_800/quality,q_${this.quality}`</div>
<div class="code-line"><span class="line-number">1339</span>      }</div>
<div class="code-line"><span class="line-number">1340</span>      </div>
<div class="code-line"><span class="line-number">1341</span>      // 腾讯云COS图片压缩</div>
<div class="code-line"><span class="line-number">1342</span>      if (url.includes('myqcloud.com')) {</div>
<div class="code-line"><span class="line-number">1343</span>        return `${url}?imageView2/2/w/800/h/800/q/${this.quality}`</div>
<div class="code-line"><span class="line-number">1344</span>      }</div>
<div class="code-line"><span class="line-number">1345</span>      </div>
<div class="code-line"><span class="line-number">1346</span>      return url</div>
<div class="code-line"><span class="line-number">1347</span>    },</div>
<div class="code-line"><span class="line-number">1348</span>    </div>
<div class="code-line"><span class="line-number">1349</span>    onLoad(e) {</div>
<div class="code-line"><span class="line-number">1350</span>      this.loading = false</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1351</span>      this.error = false</div>
<div class="code-line"><span class="line-number">1352</span>      this.retryCount = 0</div>
<div class="code-line"><span class="line-number">1353</span>      this.$emit('load', e)</div>
<div class="code-line"><span class="line-number">1354</span>    },</div>
<div class="code-line"><span class="line-number">1355</span>    </div>
<div class="code-line"><span class="line-number">1356</span>    onError(e) {</div>
<div class="code-line"><span class="line-number">1357</span>      this.loading = false</div>
<div class="code-line"><span class="line-number">1358</span>      this.error = true</div>
<div class="code-line"><span class="line-number">1359</span>      console.warn('图片加载失败:', this.src, e)</div>
<div class="code-line"><span class="line-number">1360</span>      </div>
<div class="code-line"><span class="line-number">1361</span>      // 如果有错误占位图，显示它</div>
<div class="code-line"><span class="line-number">1362</span>      if (this.errorImage &amp;&amp; this.currentSrc !== this.errorImage) {</div>
<div class="code-line"><span class="line-number">1363</span>        this.currentSrc = this.errorImage</div>
<div class="code-line"><span class="line-number">1364</span>        return</div>
<div class="code-line"><span class="line-number">1365</span>      }</div>
<div class="code-line"><span class="line-number">1366</span>      </div>
<div class="code-line"><span class="line-number">1367</span>      this.$emit('error', e)</div>
<div class="code-line"><span class="line-number">1368</span>    },</div>
<div class="code-line"><span class="line-number">1369</span>    </div>
<div class="code-line"><span class="line-number">1370</span>    retry() {</div>
<div class="code-line"><span class="line-number">1371</span>      if (this.retryCount &lt; this.maxRetry) {</div>
<div class="code-line"><span class="line-number">1372</span>        this.retryCount++</div>
<div class="code-line"><span class="line-number">1373</span>        console.log(`重试加载图片 (${this.retryCount}/${this.maxRetry}):`, this.src)</div>
<div class="code-line"><span class="line-number">1374</span>        this.loadImage()</div>
<div class="code-line"><span class="line-number">1375</span>      } else {</div>
<div class="code-line"><span class="line-number">1376</span>        uni.showToast({</div>
<div class="code-line"><span class="line-number">1377</span>          title: '图片加载失败',</div>
<div class="code-line"><span class="line-number">1378</span>          icon: 'none'</div>
<div class="code-line"><span class="line-number">1379</span>        })</div>
<div class="code-line"><span class="line-number">1380</span>      }</div>
<div class="code-line"><span class="line-number">1381</span>    },</div>
<div class="code-line"><span class="line-number">1382</span>    </div>
<div class="code-line"><span class="line-number">1383</span>    onClick(e) {</div>
<div class="code-line"><span class="line-number">1384</span>      this.$emit('click', e)</div>
<div class="code-line"><span class="line-number">1385</span>    }</div>
<div class="code-line"><span class="line-number">1386</span>  }</div>
<div class="code-line"><span class="line-number">1387</span>}</div>
<div class="code-line"><span class="line-number">1388</span>&lt;/script&gt;</div>
<div class="code-line"><span class="line-number">1389</span></div>
<div class="code-line"><span class="line-number">1390</span>&lt;style lang="scss" scoped&gt;</div>
<div class="code-line"><span class="line-number">1391</span>.optimized-image {</div>
<div class="code-line"><span class="line-number">1392</span>  position: relative;</div>
<div class="code-line"><span class="line-number">1393</span>  display: flex;</div>
<div class="code-line"><span class="line-number">1394</span>  align-items: center;</div>
<div class="code-line"><span class="line-number">1395</span>  justify-content: center;</div>
<div class="code-line"><span class="line-number">1396</span>  background-color: #f5f5f5;</div>
<div class="code-line"><span class="line-number">1397</span>}</div>
<div class="code-line"><span class="line-number">1398</span></div>
<div class="code-line"><span class="line-number">1399</span>.optimized-image-main {</div>
<div class="code-line"><span class="line-number">1400</span>  width: 100%;</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1401</span>  height: 100%;</div>
<div class="code-line"><span class="line-number">1402</span>  </div>
<div class="code-line"><span class="line-number">1403</span>  &amp;.loading {</div>
<div class="code-line"><span class="line-number">1404</span>    opacity: 0.8;</div>
<div class="code-line"><span class="line-number">1405</span>  }</div>
<div class="code-line"><span class="line-number">1406</span>}</div>
<div class="code-line"><span class="line-number">1407</span></div>
<div class="code-line"><span class="line-number">1408</span>.placeholder {</div>
<div class="code-line"><span class="line-number">1409</span>  width: 100%;</div>
<div class="code-line"><span class="line-number">1410</span>  height: 100%;</div>
<div class="code-line"><span class="line-number">1411</span>  display: flex;</div>
<div class="code-line"><span class="line-number">1412</span>  align-items: center;</div>
<div class="code-line"><span class="line-number">1413</span>  justify-content: center;</div>
<div class="code-line"><span class="line-number">1414</span>}</div>
<div class="code-line"><span class="line-number">1415</span></div>
<div class="code-line"><span class="line-number">1416</span>.placeholder-image {</div>
<div class="code-line"><span class="line-number">1417</span>  width: 100%;</div>
<div class="code-line"><span class="line-number">1418</span>  height: 100%;</div>
<div class="code-line"><span class="line-number">1419</span>  opacity: 0.3;</div>
<div class="code-line"><span class="line-number">1420</span>}</div>
<div class="code-line"><span class="line-number">1421</span></div>
<div class="code-line"><span class="line-number">1422</span>.loading-overlay {</div>
<div class="code-line"><span class="line-number">1423</span>  position: absolute;</div>
<div class="code-line"><span class="line-number">1424</span>  top: 50%;</div>
<div class="code-line"><span class="line-number">1425</span>  left: 50%;</div>
<div class="code-line"><span class="line-number">1426</span>  transform: translate(-50%, -50%);</div>
<div class="code-line"><span class="line-number">1427</span>  z-index: 10;</div>
<div class="code-line"><span class="line-number">1428</span>}</div>
<div class="code-line"><span class="line-number">1429</span></div>
<div class="code-line"><span class="line-number">1430</span>.error-overlay {</div>
<div class="code-line"><span class="line-number">1431</span>  position: absolute;</div>
<div class="code-line"><span class="line-number">1432</span>  top: 0;</div>
<div class="code-line"><span class="line-number">1433</span>  left: 0;</div>
<div class="code-line"><span class="line-number">1434</span>  right: 0;</div>
<div class="code-line"><span class="line-number">1435</span>  bottom: 0;</div>
<div class="code-line"><span class="line-number">1436</span>  display: flex;</div>
<div class="code-line"><span class="line-number">1437</span>  flex-direction: column;</div>
<div class="code-line"><span class="line-number">1438</span>  align-items: center;</div>
<div class="code-line"><span class="line-number">1439</span>  justify-content: center;</div>
<div class="code-line"><span class="line-number">1440</span>  background-color: rgba(0, 0, 0, 0.05);</div>
<div class="code-line"><span class="line-number">1441</span>  z-index: 10;</div>
<div class="code-line"><span class="line-number">1442</span>}</div>
<div class="code-line"><span class="line-number">1443</span></div>
<div class="code-line"><span class="line-number">1444</span>.error-text {</div>
<div class="code-line"><span class="line-number">1445</span>  font-size: 24rpx;</div>
<div class="code-line"><span class="line-number">1446</span>  color: #999;</div>
<div class="code-line"><span class="line-number">1447</span>  margin-top: 16rpx;</div>
<div class="code-line"><span class="line-number">1448</span>  text-align: center;</div>
<div class="code-line"><span class="line-number">1449</span>}</div>
<div class="code-line"><span class="line-number">1450</span>&lt;/style&gt; </div>
<div class="file-header">文件: ./components/VirtualList.vue</div>
<div class="page-break"></div>
<div class="code-line"><span class="line-number">1451</span>&lt;template&gt;</div>
<div class="code-line"><span class="line-number">1452</span>  &lt;scroll-view </div>
<div class="code-line"><span class="line-number">1453</span>    class="virtual-list"</div>
<div class="code-line"><span class="line-number">1454</span>    :scroll-y="true"</div>
<div class="code-line"><span class="line-number">1455</span>    :style="containerStyle"</div>
<div class="code-line"><span class="line-number">1456</span>    :scroll-top="scrollTop"</div>
<div class="code-line"><span class="line-number">1457</span>    :enable-back-to-top="enableBackToTop"</div>
<div class="code-line"><span class="line-number">1458</span>    @scroll="onScroll"</div>
<div class="code-line"><span class="line-number">1459</span>    @scrolltoupper="onScrollToUpper"</div>
<div class="code-line"><span class="line-number">1460</span>    @scrolltolower="onScrollToLower"</div>
<div class="code-line"><span class="line-number">1461</span>  &gt;</div>
<div class="code-line"><span class="line-number">1462</span>    &lt;!-- 上方占位 --&gt;</div>
<div class="code-line"><span class="line-number">1463</span>    &lt;view :style="{ height: topPlaceholderHeight + 'px' }"&gt;&lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1464</span>    </div>
<div class="code-line"><span class="line-number">1465</span>    &lt;!-- 可见项目 --&gt;</div>
<div class="code-line"><span class="line-number">1466</span>    &lt;view class="virtual-list-item" v-for="item in visibleItems" :key="item.key"&gt;</div>
<div class="code-line"><span class="line-number">1467</span>      &lt;slot :item="item.data" :index="item.index"&gt;&lt;/slot&gt;</div>
<div class="code-line"><span class="line-number">1468</span>    &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1469</span>    </div>
<div class="code-line"><span class="line-number">1470</span>    &lt;!-- 下方占位 --&gt;</div>
<div class="code-line"><span class="line-number">1471</span>    &lt;view :style="{ height: bottomPlaceholderHeight + 'px' }"&gt;&lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1472</span>    </div>
<div class="code-line"><span class="line-number">1473</span>    &lt;!-- 加载更多 --&gt;</div>
<div class="code-line"><span class="line-number">1474</span>    &lt;view v-if="showLoadMore" class="load-more"&gt;</div>
<div class="code-line"><span class="line-number">1475</span>      &lt;u-loading-icon v-if="loading" mode="flower" /&gt;</div>
<div class="code-line"><span class="line-number">1476</span>      &lt;text class="load-more-text"&gt;</div>
<div class="code-line"><span class="line-number">1477</span>        {{ loading ? '加载中...' : hasMore ? '上拉加载更多' : '没有更多数据了' }}</div>
<div class="code-line"><span class="line-number">1478</span>      &lt;/text&gt;</div>
<div class="code-line"><span class="line-number">1479</span>    &lt;/view&gt;</div>
<div class="code-line"><span class="line-number">1480</span>  &lt;/scroll-view&gt;</div>
<div class="code-line"><span class="line-number">1481</span>&lt;/template&gt;</div>
<div class="code-line"><span class="line-number">1482</span></div>
<div class="code-line"><span class="line-number">1483</span>&lt;script&gt;</div>
<div class="code-line"><span class="line-number">1484</span>export default {</div>
<div class="code-line"><span class="line-number">1485</span>  name: 'VirtualList',</div>
<div class="code-line"><span class="line-number">1486</span>  props: {</div>
<div class="code-line"><span class="line-number">1487</span>    // 数据列表</div>
<div class="code-line"><span class="line-number">1488</span>    items: {</div>
<div class="code-line"><span class="line-number">1489</span>      type: Array,</div>
<div class="code-line"><span class="line-number">1490</span>      default: () =&gt; []</div>
<div class="code-line"><span class="line-number">1491</span>    },</div>
<div class="code-line"><span class="line-number">1492</span>    // 每项高度</div>
<div class="code-line"><span class="line-number">1493</span>    itemHeight: {</div>
<div class="code-line"><span class="line-number">1494</span>      type: Number,</div>
<div class="code-line"><span class="line-number">1495</span>      required: true</div>
<div class="code-line"><span class="line-number">1496</span>    },</div>
<div class="code-line"><span class="line-number">1497</span>    // 容器高度</div>
<div class="code-line"><span class="line-number">1498</span>    height: {</div>
<div class="code-line"><span class="line-number">1499</span>      type: [String, Number],</div>
<div class="code-line"><span class="line-number">1500</span>      default: '100vh'</div>

</body>
</html>
